O ile mi wiadomo, w programie Excel nie ma wbudowanych funkcji, które mogą analizować i podsumowywać tagi rozdzielane przecinkami. Możesz oczywiście stworzyć własne rozwiązanie z funkcjami arkusza i odrobiną VBA. Oto szybkie rozwiązanie tego problemu.
Krok 1 : Naciśnij Alt+, F11aby otworzyć panel edytora VBA w programie Excel. Wstaw nowy moduł i wklej ten kod dla funkcji niestandardowej.
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
Ta funkcja umożliwia tworzenie list oddzielonych przecinkami w celu podsumowania posiadanych danych znaczników.
Krok 2 : W arkuszu wprowadź w komórce (H2 w poniższym przykładzie) znacznik, który chcesz wyszukać. W komórce po prawej wprowadź następującą formułę, naciskając Ctrl+ Shift+ Enter.
=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")
Naciśnięcie Ctrl+ Shift+ Enterpowoduje wprowadzenie formuły jako formuły tablicowej. Zostanie wyświetlony w otoczeniu {...}
na pasku formuły. Zauważ, że we wzorze $B$2:$B$6
jest zakres, który zawiera wszystkie tagi dla pozycji wymienionych w $A$2:$A$6
.
EDYCJA:
Jeśli nie przeszkadza ci to, że dopasowania są wyświetlane w kolumnie zamiast na liście w jednej komórce, możesz zwrócić dopasowania dla znaczników, używając tylko funkcji arkusza.
Gdzie są tytuły Column A
, znaczniki są Column B
, a tag szukasz jest H2
, można użyć następującej formuły tablicowej w I2
i wypełnić w dół tak daleko, jak trzeba:
=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)),"")
Formuła działa najpierw poprzez utworzenie tablicy liczb na podstawie tego, czy znaczniki w każdym wierszu zawierają wyszukiwane hasło. Jeśli znaleziono dopasowanie, numer wiersza jest zapisywany w tablicy. Jeśli nie zostanie znaleziony, 2000000 zostanie zapisany w tablicy. Następnie SMALL(<array>,ROW()-1)
część formuły zwraca ROW()-1
najmniejszą wartość z tablicy. Następnie ta wartość jest przekazywana jako argument indeksu do INDEX()
funkcji, gdzie zwracana jest wartość tego indeksu w tablicy tytułów. Jeśli liczba większa niż liczba wierszy w tablicy tytułowej zostanie przekazana INDEX()
jako argument, zwracany jest błąd. Ponieważ 2000000 jest przekazywany jako argument, gdy nie znaleziono żadnych dopasowań, zwracany jest błąd. W takim przypadku IFERROR()
funkcja powraca ""
.
Ważne jest, aby zrozumieć, jak ROW()
jest stosowany w tej formule. Jeśli chcesz wyświetlić listę wyników zaczynającą się w innym wierszu, musisz dostosować drugi argument SMALL()
funkcji, aby zwracała pierwszą najmniejszą wartość z tablicy. Na przykład, jeśli lista wyników zaczyna się w wierszu 1 zamiast w wierszu 2, należy użyć SMALL(...,ROW())
zamiast SMALL(...,ROW()-1)
.
Ponadto, jeśli lista tytułów i tagów nie rozpoczyna się w wierszu 1, musisz również dostosować formułę. Drugi argument IF()
funkcji musi zostać dostosowany, aby dopasowanie w pierwszym wierszu danych zwróciło 1. Np. Jeśli lista tytułów rozpoczyna się w wierszu 2 zamiast w wierszu 1, konieczne będzie uwzględnienie formuły IF(...,ROW($A$2:$A$7)-1,...)
zamiast IF(...,ROW($A$1:$A$6),...)
.