#excel #vba
Вопрос:
Если у меня есть колонка следующего содержания,
1
2
2
1
3
4
5
как бы я нашел первое вхождение определенного числа, идущего вверх от известного значения, скажем, 4. Я знаю положение 4 в столбце и хочу, чтобы номер строки первого вхождения 1 шел вверх от 4 (в данном случае номер строки 4).
Моим инстинктом было запустить цикл FOR, но я думаю, что для этого есть довольно простой метод, с которым я не знаком.
Спасибо за помощь!
p.s — Я понимаю, что другим способом найти это было бы найти последнее вхождение значения в диапазоне от первой строки до позиции 4. Рад узнать либо то, либо другое.
Комментарии:
1. Предположим, значения находятся в диапазоне,, B2:B8, тогда формула excel
LOOKUP(2,1/($B$2:$B$8=4),ROW($B$2:$B$8))
вернет номер строки из первых 4 снизу. Если его индекс/позиция в значениях необходимы, тоresult-Row(B1)
. При необходимости в VBA можно было бы вычислить ту же формулу.2. Для справки, exceljet.net/how-to-lookup-first-and-last-match
3. @Nathan_Sav, это так, но спасибо за ответ. Я не понимаю этой формулы, но я тоже ее выучу.
Ответ №1:
Sheet1.Range("M:M").Find(What:="1", SearchDirection:=xlPrevious, After:=Range("M12")).Address
Комментарии:
1. Спасибо! Я только что научился им пользоваться . найдите метод, чтобы найти позицию 4 в этом примере, но он был незнаком с различными дополнительными аргументами, которые могут быть в нем приведены. Это именно то, что мне было нужно.
2. Просто чтобы я мог лучше понять метод htis, метод .find возвращает любое вхождение аргумента, верно? Например, если бы вместо 1 было 16, он все равно вернул бы ту же позицию, потому что значение содержит «1». И если это правда, то здесь я использую l»ookat := xlwhole», верно?
3. @Wren это правильно, вы будете использовать LookAt:=xlWhole, чтобы найти полную строку
4. Да, я попробовал это сделать. Кажется, это работает. большое спасибо!