[Excel] Tabelleninhalt nach Wert summieren

sagrosser

Grünschnabel
Ich habe eine Tabelle (b3:u54) mit mehreren Namen und würde mir gerne jeden Namen mit der Anzahl seiner Häufigkeit in der Tabelle ausgeben lassen.
Da es eine große Anzahl von Namen ist (ca. 80), sollten diese automatisch erfasst werden und nicht nacheinander als Vergleichswert eingegeben werden müssen.
Habe verschiedenes aus dem Netz getestet aber das scheint nicht zu funktionieren oder ich bin zu blöd es umzusetzen ;)
 
Hallo,

ich habe auf die Schnelle etwas aus zwei Excel-Funktionen zusammengebastelt. (Vielleicht gibt es auch elegantere Methoden.)

Klicke auf das folgende Bild, um das GIF abzuspielen.

excel-countif.gif


1. Markiere deine Namen
2. Filtere diese Liste, sodass Duplikate entfernt werden. Siehe hierzu: http://office.microsoft.com/en-001/...s-or-remove-duplicate-values-HP010073943.aspx
3. Nutze nun die Funktion COUNTIF ("ZÄHLENWENN" in der dt. Excel-Version). Siehe hierzu: http://office.microsoft.com/en-001/excel-help/countif-HP005209029.aspx
 
Vielen Dank erstmal!
Allerdings habe ich Daten in mehreren Spalten. Es ist eine Art Trainingstabelle (s. u.) und ich möchte wissen, wer wie oft trainiert hat.
An welchem Gerät ist dabei unerheblich, es kommt nur auf die Gesamtzahl an. Mit deiner Lösung erhalte ich falsche Werte.Tabelle.gif
 
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
sample.PNG

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.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück