Если ячейка содержит несколько экземпляров определенного текста, извлеките верхние 3 указанного текста, найденного в ячейке

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

cartoon,high volume,safe,funny

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

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

history
science
funny
cartoon

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

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

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

funny, cartoon

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

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

Спасибо!

Что означает «3 лучших матча»? Что ты пробовал? Вам нужно решение для Excel или для Таблиц?

Ron Rosenfeld 01.09.2018 01:41

Excel или GoogleSheets? Должно ли решение применяться к обоим или есть только одно, с которым оно должно работать?

QHarr 01.09.2018 06:29

Для возврата в виде CSV - для этого потребуется скрипт AFAIK.

QHarr 01.09.2018 06:32
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
5
3
362
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это частичный ответ для начала. Вы должны сами выяснить вторую часть («вернуть 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 в зависимости от ситуации.

img

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


Больше информации:

Ответ принят как подходящий

Решение :

'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), "")

решение:

'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, почему вы ищете "|"?

Falcor 04.09.2018 19:12

Он используется с SUBSTITUTE, чтобы обрезать первые 3.

user4039065 04.09.2018 19:58

Ой, попался. Имеет смысл. Большое спасибо за помощь!

Falcor 04.09.2018 22:48

Другие вопросы по теме