Формула Excel, чтобы найти первый не альфа-символ в ячейке? - PullRequest
1 голос
/ 02 октября 2009

Есть ли способ использовать формулу ячейки в Excel, чтобы найти индекс первого не альфа-символа в ссылочной ячейке?

Я импортировал данные в Excel, столбец которого выглядит следующим образом:

<some text I don't want in the derived cell><some text that prepends the text I want and is always constant>TheTextIWant<Some non-alpha character><some other characters that may be alpha or not>

Я пытаюсь создать формулу, которая пока выглядит следующим образом:

=MID(<cell reference>, SEARCH("<prepended text>, <cell reference>) + <length of prepended text>, ??)

Где ?? является некоторой подформулой, которая находит первый не-буквенный символ после "TheTextIWant"

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Чтобы немного подробнее узнать о том, как работает формула массива (формула @ 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
        )
    )
)
  1. В основе этой функции лежит функция row (), которая в режиме массива оценивается один раз для каждой из ячеек в диапазоне a1: a * n *, где n - длина строка в ячейке A1, создающая массив {1,2, ..., n }.
  2. Массив передается в функцию MID, которая, в свою очередь, создает массив {* char_1 *, * char_2 *, ..., * char_n *}.
  3. Массив умножается на 1, чтобы не допустить синтаксического анализа числовых символов как текста на последующих шагах. Это также можно сделать с помощью VALUE ().
  4. Затем он передается в функцию 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)))

        )
    )
)
0 голосов
/ 02 октября 2009

На этой странице есть формула массива для поиска «Позиции первой цифры в строке». Вы должны быть в состоянии изменить это, чтобы использовать функцию 'T' (чтобы определить, является ли символ текстом), включить небольшое вычитание и затем получить то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...