Zaintrygowało mnie to pytanie i chciałem dowiedzieć się, jak rozwiązać to za pomocą makra. Wiem, że powiedziałeś, że chcesz uniknąć makra, ale nie sądzę, że można tego dokonać za pomocą samej funkcji.
Poniższy kod zapętla się nad komórką B2: B25 (można to zmienić lub zmienić na parametr lub wybrane komórki, ale na razie wydawało się to najłatwiejsze). Używa niestandardowej klasy o nazwie KeyValue do agregacji nazwy znacznika i liczby wystąpień. Można to poprawić za pomocą obiektu Dictionary, ale wymaga to innych dodatków. Oddziela tagi rozdzielane przecinkami od każdej komórki i zlicza częstotliwość. Następnie wysyła tę listę do pierwszych dwóch kolumn w drugim arkuszu.
Aby dodać kod, wykonaj następujące czynności. Najpierw w skoroszycie należy włączyć pasek narzędzi dla programistów, a następnie kliknąć Visual Basicprzycisk. Następnie dodaj nowy moduł klasy i nazwij go KeyValue. Wklej następujący kod:
Public Key As String
Public Value As Integer
Public Sub Init(k As String, v As Integer)
Key = k
Value = v
End Sub
Następnie w arkuszu 1 dodaj następujący kod:
Public Sub CountTags()
Dim kv As KeyValue
Dim count As Integer
Dim tag As String
Dim tags As New Collection
Dim splitTags As Variant
For Each Cell In Sheet1.Range("B2:B25")
' Split the comma separated list and process each tag
splitTags = Split(Cell.Value, ", ")
For tagIndex = LBound(splitTags) To UBound(splitTags)
tag = splitTags(tagIndex)
' If tag is in collection get new count otherwise start at 1.
If Contains(tags, tag) Then
Set kv = tags(tag)
count = kv.Value + 1
tags.Remove tag
Else
count = 1
End If
' Add tag to the collection with its count.
Set kv = New KeyValue
kv.Init tag, count
tags.Add kv, tag
Next
Next Cell
Dim rowIndex As Integer
rowIndex = 1
For Each pair In tags
Set kv = pair
Sheet2.Cells(rowIndex, 1) = kv.Key
Sheet2.Cells(rowIndex, 2) = kv.Value
rowIndex = rowIndex + 1
Next pair
End Sub
Private Function Contains(col As Collection, Key As Variant) As Boolean
Dim obj As Variant
On Error GoTo err
Contains = True
Set obj = col(Key)
Exit Function
err:
Contains = False
End Function
Kliknij przycisk Uruchom, aby policzyć tagi.