Наскільки я знаю, немає вбудованих функцій, які б могли проаналізувати та узагальнити теги, розділені комами, в 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
.
EDIT:
Якщо ви не заперечуєте за тим, щоб ваші збіги були вказані у стовпчику, а не у списку в одній комірці, ви можете повернути збіги для тегів, використовуючи лише функції робочого аркуша.
Де ваші назви в 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),...)
.