У меня есть ячейка в A1, которая выглядит примерно так
cartoon,high volume,safe,funny
ect ... Нет реального ограничения на количество значений, которые могут содержать эти ячейки.
В другом столбце D у меня есть конкретные строки наиболее важных, например, так
history
science
funny
cartoon
ect ... Этот список также может быть довольно длинным, но в настоящее время он составляет около 50 значений.
Я хочу проверить, имеет ли строка в A1 какое-либо из значений в столбце D, и если да, вернуть 3 верхних значения, которые существуют в столбце D, которые соответствуют любому значению в ячейке A1 как csv.
Таким образом, вывод для приведенного выше примера должен быть следующим
funny, cartoon
Все, что я пробовал, похоже, не дает мне результата, который я ищу, а только дает первое найденное значение вместо трех лучших совпадений.
Любые идеи? Я также открыт для запуска сценария по этому поводу, который кажется лучшим способом сделать это, но я не совсем уверен, с чего начать.
Спасибо!
Excel или GoogleSheets? Должно ли решение применяться к обоим или есть только одно, с которым оно должно работать?
Для возврата в виде CSV - для этого потребуется скрипт AFAIK.


Это частичный ответ для начала. Вы должны сами выяснить вторую часть («вернуть 3 верхних значения, которые существуют в столбце 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 + Enter, чтобы ввести формулу (вместо простого нажатия Enter).
Это вернет TRUE, поскольку значение существует. Вы могли бы иметь больше наборов строк в ячейках ниже A1 и скопировать или «заполнить» формулу в B1, чтобы вернуть TRUE или FALSE в зависимости от ситуации.

Вторая часть, возврат только трех верхних значений, которые существуют в другом наборе ячеек, будет немного сложнее, если вы не напишете настраиваемую функцию VBA или, что еще лучше, разделите данные на отдельные ячейки как и задумано богами Microsoft.
Решение таблица Google:
'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), "")
excel-2016textjoin решение:
'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), "")
Это сработало как шарм, большое спасибо! QQ, в формуле таблиц Google, почему вы ищете "|"?
Он используется с SUBSTITUTE, чтобы обрезать первые 3.
Ой, попался. Имеет смысл. Большое спасибо за помощь!
Что означает «3 лучших матча»? Что ты пробовал? Вам нужно решение для Excel или для Таблиц?