22

Я ищу способ извлечь подстроку переменной длины из строки.

Мои клетки будут выглядеть примерно так:

ABC - DEF
ABCDE - DEF
ABCD - ABC

Я хочу разбить строку на символ - , чтобы ячейки стали:

ABC
ABCDE
ABCD

Это должно быть сделано с формулой, а не VBScript.

Я использую Excel 2010

РЕДАКТИРОВАТЬ

Я обнаружил, что набор данных не всегда содержит символ - , то есть не должно быть никаких изменений.

5 ответов5

26

Эта проблема может быть разбита на два этапа:

  1. Найдите в строке указатель нужного вам символа разделения (в данном случае "-" или " - ").
  2. Получите префиксную подстроку от начала исходного текста до индекса разделения.

Каждая из команд FIND и SEARCH возвращает индекс заданной needle в haystack (FIND чувствителен к регистру, SEARCH нечувствителен к регистру и допускает подстановочные знаки). Учитывая это, мы имеем:

FIND(search_text, source_cell, start_index)

или в этом случае:

FIND(" - ", A1, 1)

Как только у нас есть индекс, нам нужен префикс source_cell чтобы сделать "split". MID делает именно это:

MID(source_cell, start_index, num_characters)

Соединяя их вместе, мы имеем:

=MID(A1,1,FIND(" - ",A1,1))

с A1, имеющим текст ABC - DEF дает ABC .

7

Разбираясь с ответом Эндрю, основанным на ваших изменениях: чтобы найти строку символов для разделения, мы используем функцию FIND . Если FIND не может найти данную строку, он возвращает #VALUE? ошибка. Поэтому нам нужно проверить это значение и использовать вместо него замещающее значение.

Для проверки любого значения ошибки, включая #VALUE , мы используем функцию ISERROR , таким образом:

=ISERROR(FIND(" - ", A1, 1))

это будет верно, если функция FIND не сможет найти строку "-" в ячейке A1. Поэтому мы используем это, чтобы решить, какое значение использовать:

=IF(ISERROR(FIND(" - ", A1, 1)), A1, MID(A1, 1, FIND(" - ", A1, 1)))

Это говорит о том, что если команда find возвращает ошибку, используйте неизмененную ячейку A1. В противном случае, сделайте функцию MID которую Эндрю уже предоставил.

2

Спасибо @AndrewColeson за ваш ответ.

Чтобы добавить к этому, если вы хотите, чтобы все находилось справа от - , используйте этот код:

= MID(A1, LEN(В1)+3, LEN(A1))

Который:

A1 = ABC - DEF
B1 = =MID(A1,1,FIND(" - ",A1,1))
    B1 = ABC
Therefore A1 = DEF

Этот код отлично подходит, если у вас есть неопределенное количество символов после - .

Например:

Если у вас есть:

ABC - DEFG
AB - CDEFGH
...
1

Вот очень простой способ извлечь 5-й символ слева из текстовой строки в Excel:

Предположим, что строка символов ABCDEFGHIJ хранится в ячейке A1 в электронной таблице Excel, а затем следующая формула

=RIGHT(LEFT(A1,5),1)

производит 5-й символ слева в строке, а именно E

0

Следующая формула удалит подстроку из [TEXTCOLUMN_1]

Например: если вы хотите преобразовать -./thumb/hello.jpg в thumb/hello.jpg используйте следующую формулу

=SUBSTITUTE([TEXTCOLUMN_1],LEFT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)

[TEXTCOLUMN_1] = имя столбца, который вы хотите изменить [NUM_OF_CHARACTERS] = количество символов слева, которое вы хотите удалить

Если вы хотите удалить с правой стороны, используйте следующие

=SUBSTITUTE([TEXTCOLUMN_1],RIGHT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .