Формула Excel: удаление числовых символов из ячейки -

Содержание

Общая формула

(=TEXTJOIN("",TRUE,IF(ISERR(MID(A1,ROW(INDIRECT("1:100")),1)+0),MID(A1,ROW(INDIRECT("1:100")),1),"")))

Резюме

Чтобы удалить числовые символы из текстовой строки, вы можете использовать формулу, основанную на функции TEXTJOIN. В показанном примере формула C5 имеет следующий вид:

=TEXTJOIN("",TRUE,IF(ISERR(MID(B5,ROW(INDIRECT("1:100")),1)+0),MID(B5,ROW(INDIRECT("1:100")),1),""))

Примечание: это формула массива, и ее необходимо вводить с помощью Ctrl + Shift + Enter, кроме Excel 365.

Объяснение

В Excel нет способа преобразовать буквы текстовой строки в массив непосредственно в формуле. В качестве обходного пути в этой формуле используется функция MID с помощью функций ROW и INDIRECT для достижения того же результата. Скопированная формула в C5:

=TEXTJOIN("",TRUE,IF(ISERR(MID(B5,ROW(INDIRECT("1:100")),1)+0),MID(B5,ROW(INDIRECT("1:100")),1),""))

Это выглядит довольно сложно, но суть в том, что мы создаем массив всех символов в B5 и проверяем каждый символ, чтобы увидеть, является ли он числом. Если это так, мы отбрасываем значение и заменяем его пустой строкой (""). Если нет, мы добавляем нечисловой символ в «обработанный» массив. Наконец, мы используем функцию TEXTJOIN (новая в Excel 2019) для объединения всех символов вместе, игнорируя пустые значения.

Работая изнутри, функция MID используется для извлечения текста в B5, по одному символу за раз. Ключевым моментом здесь является фрагмент ROW и INDIRECT:

ROW(INDIRECT("1:100"))

который раскручивает массив, содержащий 100 таких чисел:

(1,2,3,4,5,6,7,8… .99,100)

Примечание: 100 представляет максимальное количество символов для обработки. Измените в соответствии с вашими данными или используйте функцию LEN, как описано ниже.

Этот массив входит в функцию MID как аргумент start_num . Для num_chars мы используем 1.

Функция MID возвращает такой массив:

("3";"4";"6";"5";"3";" ";"J";"i";"m";" ";"M";"c";"D";"o";"n";"a";"l";"d";"";"";"";… )

Примечание: лишние элементы в массиве удалены для удобства чтения.

К этому массиву мы добавляем ноль. Это простой трюк, который заставляет Excel преобразовывать текст в число. Числовые текстовые значения, такие как «1», «2», «3», «4» и т. Д., Преобразуются без ошибок, но нечисловые значения завершатся ошибкой и вызовут ошибку #VALUE. Мы используем функцию ЕСЛИ с функцией ISERR, чтобы отловить эти ошибки. Когда мы видим ошибку, мы знаем, что у нас есть нечисловой символ, поэтому мы переносим этот символ в обработанный массив с помощью другой функции MID:

MID(B5,ROW(INDIRECT("1:100")),1)

Если ошибки не возникает, значит, мы знаем, что у нас есть номер, поэтому вставляем в массив пустую строку ("") вместо числа.

Окончательный результат массива передается в функцию TEXTJOIN в качестве аргумента text1. В качестве разделителя мы используем пустую строку (""), а для ignore_empty мы указываем TRUE. Затем TEXTJOIN объединяет все непустые значения в массиве и возвращает результат.

Точная длина массива

Вместо того, чтобы жестко кодировать число, такое как 100, в INDIRECT, вы можете использовать функцию LEN для создания массива с фактическим количеством символов в ячейке следующим образом:

MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)

LEN возвращает количество символов в ячейке в виде числа, которое используется вместо 100. Это позволяет формуле автоматически масштабироваться до любого количества символов.

Удаление лишнего места

Когда вы удаляете числовые символы, у вас могут остаться лишние пробелы. Чтобы удалить начальные и конечные пробелы и нормализовать пробелы между словами, вы можете заключить формулу, показанную на этой странице, в функцию TRIM:

=TRIM(formula)

С ПОСЛЕДОВАТЕЛЬНОСТЬЮ

В Excel 365 новая функция ПОСЛЕДОВАТЕЛЬНОСТЬ может заменить приведенный выше код СТРОКА + ДВССЫЛКА:

=TEXTJOIN("",TRUE,IF(ISERR(MID(B5,SEQUENCE(LEN(B5)),1)+0),MID(B5,SEQUENCE(LEN(B5)),1),""))

Здесь мы используем SEQUENCE + LEN, чтобы построить массив правильной длины за один шаг.

С LET

Мы можем дополнительно оптимизировать эту формулу с помощью функции LET. Поскольку массив создается дважды с помощью SEQUENCE и LEN, мы можем определить массив как переменную и создать его только один раз:

=LET(array,SEQUENCE(LEN(B5)),TEXTJOIN("",TRUE,IF(ISERR(MID(B5,array,1)+0),MID(B5,array,1),"")))

Здесь значение массива устанавливается только один раз, а затем используется дважды внутри функции MID.

Интересные статьи...