Насколько я знаю, в 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),...)
.