Vorbemerkung
Der in diesem Beitrag aufgeführte Code kann auch hier kopiert werden:
https://gist.github.com/ComFreek/cb83d73a41114fd2440d
Dort ist er leichter kopierbarer als hier im Forum.
Screenshot
Meinen Code einfügen
1. Wichtig: Speichere deine Arbeitsmappe, ansonsten wirst du die Schritte 3 bis 4 nicht ausführen können.
2. Öffne Visual Basic
3. Wähle aus dem Menü "Extras --> Verweise"
4. Suche in der Liste "Microsoft Scripting Runtime" aus und aktiviere das Kontrollkästen links davon.
5. Schließe den aktuellen Dialog und wähle aus dem Menü "Einfügen --> Modul".
6. Füge folgenden Code ein:
Visual Basic:
' Counts all the occurrences of individual cell values in a given range and outputs them to a given range.
'
' The output looks like:
' [cell value] | [number of occurrences]
'
' sheet: The worksheet the specified ranges belong to
' inputRange: The input range (e.g. "B3:D5")
' outputStartCellRow: The row number of the upper left cell of the output
' outputStartCellCol: The column number of the upper left cell of the output.
' The number of occurrences will be output into outputStartCellCol+1
Sub countOccurrences(sheet As Worksheet, inputRange As String, outputStartCellRow As Integer, outputStartCellCol As Integer)
Dim usageStats As Scripting.Dictionary
Set usageStats = New Scripting.Dictionary
For Each cell In sheet.Range(inputRange).Cells
Dim name As String
name = cell.Value
If name <> "" Then
If Not usageStats.Exists(name) Then
usageStats.Add name, 1
Else
usageStats.Item(name) = usageStats.Item(name) + 1
End If
End If
Next
outputOccurrences sheet, outputStartCellRow, outputStartCellCol, usageStats
End Sub
' Prints collected occurrences
Private Sub outputOccurrences(sheet As Worksheet, outputStartCellRow As Integer, outputStartCellCol As Integer, usageStats As Scripting.Dictionary)
Dim row As Integer
row = outputStartCellRow
For Each aname In usageStats.Keys
sheet.Cells(row, outputStartCellCol).Value = aname
sheet.Cells(row, outputStartCellCol + 1).Value = usageStats.Item(aname)
row = row + 1
Next aname
End Sub
Meinen Code nutzen
1. Merke dir den Bereich, in welchem all deine Namen stehen. Beispielsweise könnte dies B3 bis D5, also "B3:D5" sein.
2. Merke dir den Bereich, in welchem du die Ausgabe der Vorkommnisse haben willst. Wenn dies beispielsweise F1 bis G3 ist, so merke dir "1" als die Zeilennummer und "6" als die Spaltennummer.
2. Öffne erneut Visual Basic und erstelle ein neues Modul wie oben beschrieben.
3. Füge folgenden Code ein und passe ihn an die in den Punkten 1 und 2 ermittelten Werte an.
Visual Basic:
Sub updateListOfOccurrences()
countOccurrences ActiveWorkbook.ActiveSheet, "B3:D5", 1, 6
End Sub
(Bei "1, 6" kommt zuerst die Zeilennummer und dann die Spaltennummer!)
4. Jetzt ist der Code schon nutzbar, indem du in der normalen Excel-Oberfläche unter "Entwicklertools" auf "Makros" drückst und "updateListOfOccurrences" ausführt.
Für mehr Komfort, kannst du einen Button hinzufügen:
1. Dies geht in der Excel-Oberfläche unter dem Reiter "Entwicklertools" mit "Einfügen" und Auswahl des Button-Symbols (= das erste Element bei mir).
2. Wähle "updateListOfOccurrences" als Makro in dem nun erscheinenden Dialog aus.
3. Bearbeite ggf. die Aufschrift des Buttons zu "Aktualisieren".
4. Drücke den Button immer, wenn du die Liste aktualisieren willst.