AW: unregelmäßige Gruppen (und deren Elemente) zählen
27.09.2011 18:09:19
Peter
Hallo Alex,
eine mögliche Variante:
Option Explicit
Public Sub GruppenZaehlen()
Dim vTemp As Variant
Dim lTemp As Long
Dim vAnzahl() As Variant
Dim lAnzahl As Long
Dim lZeile As Long
Dim lAnzEins As Long
Dim bGefunden As Boolean
Dim bErster As Boolean
With ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen ggf. anpassen!
vTemp = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row + 1)
For lTemp = 1 To UBound(vTemp, 1)
If vTemp(lTemp, 1) = "" Then
If Not bErster Then
ReDim Preserve vAnzahl(0 To 1, lAnzahl)
vAnzahl(0, 0) = vAnzahl(0, 0) + 1
vAnzahl(1, 0) = lAnzEins
lAnzEins = 0
bErster = True
Else
bGefunden = False
For lAnzahl = LBound(vAnzahl, 2) To UBound(vAnzahl, 2)
If vAnzahl(1, lAnzahl) = lAnzEins Then
vAnzahl(0, lAnzahl) = vAnzahl(0, lAnzahl) + 1
lAnzEins = 0
bGefunden = True
Exit For
End If
Next lAnzahl
If Not bGefunden Then
lAnzahl = UBound(vAnzahl, 2) + 1
ReDim Preserve vAnzahl(0 To 1, lAnzahl)
vAnzahl(0, lAnzahl) = 1
vAnzahl(1, lAnzahl) = lAnzEins
lAnzEins = 0
End If
End If
Else
If vTemp(lTemp, 1) = 1 Then lAnzEins = lAnzEins + 1
End If
Next lTemp
.Range("C1:F" & .Cells(Rows.Count, 3).End(xlUp).Row).ClearContents
lZeile = 1
For lAnzahl = LBound(vAnzahl, 2) To UBound(vAnzahl, 2)
.Range("C" & lZeile).Value = vAnzahl(0, lAnzahl)
.Range("D" & lZeile).Value = " Gruppen mit "
.Range("E" & lZeile).Value = vAnzahl(1, lAnzahl)
.Range("F" & lZeile).Value = " Elementen."
lZeile = lZeile + 1
Next lAnzahl
End With
End Sub
Gruß Peter