Если ячейка содержит несколько экземпляров определенного текста, извлеките верхние 3 из указанного текста, найденного в ячейке. - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть ячейка в A1, которая выглядит примерно так

cartoon,high volume,safe,funny

и т. Д. Нет реального ограничения на количество значений, которые могут содержать эти ячейки

В другом столбце D у меня есть конкретные строки самых важных, например,

history
science
funny
cartoon

и т. Д. Этот список также может быть довольно длинным, но в настоящее время он составляет около 50 значений.

Я хочу проверить, имеет ли строка в A1 какое-либо из значений в столбце D, и если да, вернуть первые 3 значения, существующие в столбце D, которые соответствуют любому значению в ячейке A1 в виде csv.

Таким образом, вывод для приведенного выше примера должен быть следующим

funny, cartoon

Все, что я пробовал, похоже, не дает нужного мне результата, а дает только первое найденное значение вместо трех лучших совпадений.

Есть идеи? Я также готов запустить скрипт по этому вопросу, который, похоже, будет лучшим способом сделать это, но я не совсем уверен, с чего начать.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

решение:

'for a CSV of all matches
=arrayformula(TEXTJOIN(", ", TRUE, IF(ISNUMBER(SEARCH(E2:E8, A2)), E2:E8, "")))
'for a CSV of the first three matches
=replace(arrayformula(TEXTJOIN(", ", TRUE, IF(isnumber(search(E3:E9, A3)), E3:E9, ""))), find("|", substitute(arrayformula(TEXTJOIN(", ", TRUE, IF(isnumber(search(E3:E9, A3)), E3:E9, ""))), ",", "|", 3)&"|||"), len(A3), "")

enter image description here

решение:

'for a CSV of all matches input as array formula with ctrl+shift+enter
=TEXTJOIN(", ", TRUE, IF(ISNUMBER(SEARCH(E2:E8, A2)), E2:E8, ""))
'for a CSV of the first three matches input as array formula with ctrl+shift+enter
=replace(TEXTJOIN(", ", TRUE, IF(isnumber(search(E3:E9, A3)), E3:E9, "")), find("|", substitute(TEXTJOIN(", ", TRUE, IF(isnumber(search(E3:E9, A3)), E3:E9, "")), ",", "|", 3)&"|||"), len(A3), "")
0 голосов
/ 01 сентября 2018

Это частичный ответ, чтобы вы начали. Вам придется выяснить вторую часть («вернуть три верхних значения, которые есть в столбце D»).

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

Начнем с того, что данные не следует группировать в ячейки, как вы делаете, и ваша проблема в том, почему: с данными гораздо проще работать, искать, манипулировать и т. Д., Если они правильно хранятся в логической и организованная мода ... в Excel, которая начинается с наличия не более чем одного «куска» данных на ячейку .


Для первой половины вашей проблемы, один способ сравнить список значений с одной ячейкой, чтобы вернуть True / False, если в ячейке есть какое-либо из значений, вы можете использовать массив ** формула * с FIND, IFERROR и SUM.

Если ячейка A1 содержит cartoon,high volume,safe,funny, а ячейки D1:D4 содержат history,science,funny,cartoon, вы можете использовать эту формулу массива, например, в B1:

=SUM(IFERROR(FIND($D$1:$D$4,A1),0))>0

Чтобы сделать эту функцию формулой массива , вам нужно нажать Ctrl + Shift + Введите , чтобы ввести формула (вместо того, чтобы просто нажать Введите .)

Это вернет TRUE, так как значение существует. Вы можете иметь больше наборов строк в ячейках ниже A1 и скопировать или «заполнить» формулу в B1, чтобы вернуть TRUE или FALSE в зависимости от ситуации.

img

Вторая часть, возвращающая только верхние 3 значения, которые существуют в другом наборе ячеек, будет немного сложнее, если вы не напишите пользовательскую функцию VBA, или, что еще лучше, разделите данные на отдельные ячейки как боги Microsoft намеревались.


Дополнительная информация:

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