
У меня есть такие данные:
Мне нужно найти(получить номера строк)для ячеек, начинающихся с буквыА.
Мой текущий подход заключается в использовании «вспомогательной» колонки. ВВ1Я вхожу:
=IF(LEFT(A1)="A",1,"")
И вБи 2Я вхожу:
=IF(LEFT(A2)="A",MAX($B$1:B1)+1,"")
и копировать вниз. Это определяет строки интереса. Наконец, вС1Я использую:
=IFERROR(MATCH(ROWS($1:1),$B$1:$B$23,0),"")
и скопируйте вниз.
Моя цель — исключить столбец «помощник».
Я вижу только два варианта:
- использовать автофильтр
- использовать VBAУДФ
Подход с использованием автофильтра плох, поскольку фильтр придется запускать заново каждый раз при обновлении данных.УДФподход плохой, потому что лист должен работать в среде без VBA.
Есть ли какая-нибудь формула или формула массива, которая может получить номера строк, или я застрял со «вспомогательным» столбцом?
решение1
Попробуйте ввести это как формулу массива с помощью Ctrl+ Shift+ Enter:
{=SMALL(IF(LEFT($A$1:$A$23)="A",ROW($A$1:$A$23),9E+99),ROW())}
Я предполагаю, что ваши критерии сложнее, чем эти в вашем фактическом приложении, хотя. Вы можете заменить их LEFT($A$1:$A$23)="A"
любыми критериями, которые вам нравятся, и это все равно будет работать.
Обратите внимание, что это вернет результат, 9E+99
если вы скопируете его вниз для большего количества строк, чем есть, начинающихся с «A». Вы можете настроить его так, чтобы он возвращал пустое значение:
{=IFERROR(SMALL(IF(LEFT($A$1:$A$14)="A",ROW($A$1:$A$14),""),ROW()),"")}
решение2
Попробуйте это:
Поставьте 0 в C1.
Из C2: =match(indirect("a"&c1+1&":a<last row>",true),"a*",0)+C1
Примечания: Соответствие не чувствительно к регистру. Вам нужно управлять ошибками после того, как спросите, найдены ли соответствия.