Excel извлечь подстроку из строки

22

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

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

ABC - DEF
ABCDE - DEF
ABCD - ABC

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

ABC
ABCDE
ABCD

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

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

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

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

Питер ван Никерк
источник

Ответы:

26

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

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

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

FIND(search_text, source_cell, start_index)

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

FIND(" - ", A1, 1)

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

MID(source_cell, start_index, num_characters)

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

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

с А1, имеющим текст 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
...
Kevdog777
источник
это делает трюк также =MID(a1,FIND("-",a1)+1,LEN(a1))без каких-либо «внеклеточных» ссылок)
Мики
1

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

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

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

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

Кен Браун
источник
( MIDВ Excel нет функции? Я уверен, что она существует в устаревшей Visual Basic, и это было бы что-то вроде =MID(A1, 5, 1))
Valmiky Arquissandas
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]),)
Алам Заиб
источник