Насколько я знаю, в Excel нет встроенных функций, которые могли бы анализировать и суммировать разделенные запятыми теги. Конечно, вы можете создать свое собственное решение с функциями рабочего листа и небольшим VBA. Вот быстрое решение для этого.
Шаг 1 : Нажмите Alt+, F11чтобы открыть панель редактора VBA в Excel. Вставьте новый модуль и вставьте в этот код для пользовательской функции.
Public Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate. sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer
On Error GoTo EH
rra = rr
out = ""
i = 1
Do While i <= UBound(rra, 1)
If rra(i, 1) <> False Then
out = out & rra(i, 1) & sep
End If
i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function
EH:
rra = rr.Value
Resume Next
End Function
Эта функция позволит вам создавать разделенные запятыми списки, чтобы суммировать данные тега, которые у вас есть.
Шаг 2 : В листе введите в ячейку (H2 в примере ниже) тег, который вы хотите найти. В ячейку справа введите следующую формулу, нажав Ctrl+ Shift+ Enter.
=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")
Нажав Ctrl+ Shift+ Enter, вы вводите формулу в виде формулы массива. Он будет отображаться {...}
в строке формул. Обратите внимание, что в формуле $B$2:$B$6
указан диапазон, содержащий все теги для элементов, перечисленных в $A$2:$A$6
.
РЕДАКТИРОВАТЬ:
Если вы не возражаете против того, чтобы ваши совпадения были перечислены в столбце, а не в списке в одной ячейке, вы можете вернуть совпадения для тегов, используя только функции листа.
Где ваши названия в Column A
этих теги находятся в Column B
, а тег вы ищете в H2
, вы можете использовать следующую формулу массива в I2
и заполнить вниз, насколько вам нужно:
=IFERROR(INDEX($A$1:$A$6,SMALL(IF(NOT(ISERROR(FIND($H$2,$B$1:$B$6))),ROW($B$1:$B$6),2000000),ROW()-1)),"")
Формула работает, сначала формируя массив чисел на основе того, содержит ли теги в каждой строке искомый термин. Если совпадение найдено, номер строки сохраняется в массиве. Если он не найден, 2000000 сохраняется в массиве. Затем SMALL(<array>,ROW()-1)
часть формулы возвращает ROW()-1
наименьшее значение из массива. Затем это значение передается в качестве аргумента индекса INDEX()
функции, где возвращается значение этого индекса в массиве заголовков. Если INDEX()
в качестве аргумента передается число, превышающее количество строк в массиве заголовков, возвращается ошибка. Поскольку 2000000 передается в качестве аргумента, когда совпадений не найдено, возвращается ошибка. Затем IFERROR()
функция возвращается ""
в этом случае.
Важно понять, как ROW()
используется в этой формуле. Если вы хотите отобразить список результатов, начиная с другой строки, вам нужно настроить второй аргумент SMALL()
функции так, чтобы он возвращал первое наименьшее значение из массива. Например, если ваш список результатов начинается со строки 1 вместо строки 2, вы должны использовать SMALL(...,ROW())
вместо SMALL(...,ROW()-1)
.
Кроме того, если ваш список заголовков и тегов не начинается в строке 1, вам также необходимо изменить формулу. Второй аргумент IF()
функции должен быть скорректирован так, чтобы совпадение в первой строке ваших данных возвращало 1. Например, если ваш список заголовков начинается со строки 2 вместо строки 1, вам потребуется формула для включения IF(...,ROW($A$2:$A$7)-1,...)
вместо IF(...,ROW($A$1:$A$6),...)
.