Извлечение текста между двумя символами в Excel

Извлечение текста между двумя символами в Excel

У меня есть столбец xls со следующим шаблоном:

Model : QE85Q80T,Diagonala cm / inch : 216 cm / 85 inch,Smart TV : Da,Format : Ultra HD 4K,Tip ecran : QLED,Rezolutie (pixeli) : 3840 x 2160,Tuner Digital : Da (DVB-T2 / C / S2) x 2,Difuzor integrat : 60 W,Wireless : Da,Ethernet : Da,Iesire audio digitala (optica) : x 1,CI (Slot) : PLUS,USB 2.0 : x 2,HDMI : x 4,Culoare : Negru,Putere consumata (W) : 257,Dimensiuni cu stand (mm) : 1892.8 x 1163.1 x 338.8,Greutate (Kg) : 50.1

Обратите внимание на переменные: «Диагональ см/дюйм»; «Smart TV»; «Формат» и т. д.

Все они могут иметь разные значения.

Я пытаюсь извлечь в другую ячейку значение между "Диагональ см / дюйм :"и первый"," - в этом случае значение будет "216 см / 85 дюймов".

То же самое в другой ячейке со значением между "Smart TV :"и первый"," - значение было бы "Да" и так далее для остальных...

После многочисленных поисков в Google я пришел к следующей формуле:

=СЕРЕДИНА(F2,ПОИСК("Диагональ см / дюйм :",F2)+3,ПОИСК(",",F2)-ПОИСК("Диагональ см / дюйм :",Ф2)-4)

Проблема в том, что это ничего мне не дает.

Что я делаю не так?

решение1

Как насчет:

=LEFT(MID(A1,FIND("Diagonala cm / inch : ",A1)+LEN("Diagonala cm / inch : "),999),-1+FIND(",",MID(A1,FIND("Diagonala cm / inch : ",A1)+LEN("Diagonala cm / inch : "),999)))

введите описание изображения здесь

решение2

Ну, это уродливо и работает, но не уверен, как это адаптируется к вашим нуждам. Я думаю, что это так, если у вас есть ссылки. В любом случае, вот формула:

    =MID(B2,(SEARCH("Diagonala cm / inch :",B2)+LEN("Diagonala cm / inch :")),(SEARCH(",",B2,SEARCH("Diagonala cm / inch :",B2))-(SEARCH("Diagonala cm / inch :",B2)+LEN("Diagonala cm / inch :"))))

И вот как я к этому пришел:

введите описание изображения здесь

По сути, формула возвращает те же результаты, что и

    =mid(b2,39,17)

решение3

Что касается того, что использовать, возможно, кто-то захочет использовать следующий подход:

=LET(SearchCell,A1,  StartingString,"Diagonala cm / inch : ",  EndingString,",",    MID(SearchCell,  FIND(StartingString,SearchCell)  +  LEN(StartingString),  FIND(EndingString,SearchCell,1+FIND(StartingString,SearchCell))  -  (FIND(StartingString,SearchCell)+LEN(StartingString))  )  )

(Мне нравится Isolatedиспользование , LEN()чтобы избежать жесткого кодирования длины строки. Конечно, это можно было бы знать, так что это не было бы проблемой, но на этом все заканчивается, так сказать, и его нелегко расширить до более общего решения, которого можно было бы захотеть достичь после написания базовой формулы и ее использования в течение некоторого времени. Обновление должно быть полезным, когда это возможно!)

Подход заключается в том, чтобы найти начальную точку желаемого результата, затем конечную точку и, таким образом, количество символов, требуемых от входной строки. Отсюда FIND()и добавление длины строки поиска. А также, FIND()чтобы найти "," после этой точки, для которой нужна начальная точка с добавлением 1, чтобы FIND()начать там и не путаться с предыдущими запятыми.

Это просто и то, что они называют "уродливым"... ну ладно... Для обновления используйте функцию LET(). Можно было бы сильно увлечься этим, но я предлагаю использовать ее только для изменения входных данных в формуле: ячейка для поиска, начальная строка и конечная строка. Таким образом, изменение ячейки для поиска становится простым, поскольку это происходит только в одном месте, а не в шести или около того, где формула его использует. Также это должно ускорить процесс, поскольку это один расчет, а не шесть. Две граничные строки также легко редактировать, поскольку они находятся прямо в начале, поэтому формулу можно легко адаптировать для выполнения второго запрошенного поиска и других. Также становится довольно легко использовать входные ячейки для хранения строк для границ.

Я думаю, что большее использование LET()here отвлечет от понимания работы формулы, хотя другие мозги работают по-другому и могут захотеть поместить ее компоненты в форму Let()именованных диапазонов в области ячеек (ссылка на Excel там, программисты назвали бы их переменными), и тогда рабочая формула будет минимальной. Если бы это уменьшило ОБЩИЙ размер формулы, я бы, вероятно, предложил сделать это, но в этом случае этого не будет, так что... Но, честно говоря, для кого-то другого это имело бы противоположный смысл, так что для них, почему бы и нет?

Я предполагаю, что любой, читающий проблему, на самом деле хотел бы получить вышеизложенное, способ достижения того, что обсуждается. Но на самом деле спрашивается, почему данная формула, найденная через Google, не сработала?

В основном, потому что он не ищет правильное начало или не вычисляет правильную длину строки для взятия. Первый SEEARCH()пример: он находит начало граничной строки и добавляет... 3... к нему. Без всякой причины, учитывая, что логика формулы по сути та же самая, что используется в этих ответах. Нужно начать создаваемую строку ПОСЛЕ MID()полной граничной строки. Эта строка имеет длину 22 символа, а не 3, так что... Затем третий параметр для MID(), длина возвращаемой строки, оказывается неправильным. Он находит запятую, предшествующую граничной строке, и работает оттуда, чтобы фактически дать отрицательную длину и, следовательно, ошибку. Другие входные данные могут дать ему фактический возврат, но на самом деле он никогда не даст правильный возврат, так как использует совершенно неправильный выбор входных данных. Так что исправьте эти проблемы, и у вас должна быть рабочая формула. Хороший подход, не такая уж хорошая реализация. Но найти хороший подход почти всегда сложнее! Просто нужно пересмотреть, как вы выбираете детали, приводящие к числам, сгенерированным в качестве параметров для этой плохой MID()функции.

Связанный контент