Чтобы немного подробнее узнать о том, как работает формула массива (формула @ Jacob кажется несколько неправильной в нескольких случаях, например, 0 для «A1A»), так что вот что я думаю, это рабочая версия, расширенная для удобства чтения. Пожалуйста, дайте мне знать о любых примерах, где это не работает.
=IF(
LEN(A1)=0
,0
,MIN(
IF(
ISNUMBER(
1*MID(
A1,
ROW(INDIRECT("A1:A"&LEN(A1))),
1
)
),
ROW(INDIRECT("A1:A"&LEN(A1))),
LEN(A1)+1
)
)
)
- В основе этой функции лежит функция row (), которая в режиме массива оценивается один раз для каждой из ячеек в диапазоне a1: a * n *, где n - длина строка в ячейке A1, создающая массив {1,2, ..., n }.
- Массив передается в функцию MID, которая, в свою очередь, создает массив {* char_1 *, * char_2 *, ..., * char_n *}.
- Массив умножается на 1, чтобы не допустить синтаксического анализа числовых символов как текста на последующих шагах. Это также можно сделать с помощью VALUE ().
- Затем он передается в функцию ISNUMBER (), которая выводит массив логических значений.
Это массив условий , переданных в IF. Второй массив затем создается путем повторения шага 1, содержащего позицию каждого символа. Функция IF в режиме массива создает массив выходных данных. Случаи с условием TRUE установлены на соответствующее значение из массива позиций символов, а все остальные установлены на LEN (A1) +1, поэтому они больше любых возможных значений позиций для любых числовых символов.
Функция MIN затем оценивает вывод массива по IF, возвращая наименьшее значение, которое является позицией первого числового символа в строке в ячейке A1. Самая внешняя функция IF заставляет формулу возвращать 0, если в ячейке нет текста, а не 1; в противном случае INDIRECT возвращает #REF! ошибка при поиске ячейки A0, которая распространяется вверх, и условие FALSE возвращается IF, возвращая 0 + 1 = 1.
Для поиска позиции первого нецифрового символа вместо этого все, что вам нужно сделать, это изменить порядок вторых 2 аргументов на IF:
=IF(
LEN(A1)=0
,0
,MIN(
IF(
ISNUMBER(
1*MID(
A1,
ROW(INDIRECT("A1:A"&LEN(A1))),
1
)
),
LEN(A1)+1,
ROW(INDIRECT("A1:A"&LEN(A1)))
)
)
)