Anzahl jeweiliger Elemente zählen...
16.12.2003 15:57:56
vegaS
Hallo zusammen,
ich bin neu hier >> Guten Tag!
ich habe eine große Liste, in der untereinander Datums-Angaben stehen. Ich möchte (unter VBA) wissen, welche Daten (Datums:-) vorkommen und jeweils wie oft. Erschwerend kommt hinzu, dass nur bestimmte Zeilen für diese Auswertung hergenommen werden.
Ich kann mir einfach nicht vorstellen, dass das so umständlich sein muss, wie ich das mache:
Vielleicht hat ja von Euch jemand eine Idee!
Grüße
vegaS
Sub datumsliste()
Dim iZeile As Integer
Dim currIndex As Long, maxIndex As Long
Dim currDate As Date, minDate As Date, maxDate As Date
Dim Ergebnisse() As Long
Const iSpalteName = 4 'Spalte in der etwas stehen muss!
Const iSpalteKrit = 5 'Spalte in der "yes" stehen muss!
Const iSpalteDatum = 15 'Spalte in der Datum und Uhrzeit stehen
'########################
'## alle Zellen durchlaufen, die den vorgegebenen Kriterien
'## entsprechen und Min- Max-Datum festhalten
Sheets("Tabelle3").Select
iZeile = 6
Do Until IsEmpty(Cells(iRow, iSpalteName))
If (UCase(Cells(iZeile, iSpalteKrit)) = "YES") _
And Not IsEmpty(Cells(iZeile, iSpalteDatum)) Then
'mit DateValue() da nur Datum interssiert:
currDate = DateValue(Cells(iZeile, iSpalteDatum))
If currDate < minDate Then minDate = currDate
'weil minDatum nicht bekannt und der erste Datumswert
'auch erst mal gefunden werden muss:
If minDate = 0 Then minDate = currDate
If currDate > maxDate Then maxDate = currDate
End If
iZeile = iZeile + 1
Loop
'########################
'## ein Array anlegen dass für jedes mögliche Datum zwiaschen Min-
'## und Max-Datum ein Feld bereitstellt (enthält unter VB schon 0)
maxIndex = DateDiff("d", minDate, maxDate)
ReDim Ergebnisse(maxIndex)
'########################
'## nochmal die ganze Liste durchlaufen und für jedes gefundene
'## das entsprechende Array-Feld inkrementieren (+1)
iZeile = 6
Do Until IsEmpty(Cells(iZeile, iSpalteName))
If (UCase(Cells(iZeile, iSpalteKrit)) = "YES") _
And Not IsEmpty(Cells(iZeile, iSpalteDatum)) Then
'Datum erfassen und Array-Index berechnen:
currDate = DateValue(Cells(iZeile, iSpalteDatum))
currIndex = DateDiff("d", minDate, currDate)
'Array-Feld incrementieren:
Ergebnisse(currIndex) = Ergebnisse(currIndex) + 1
End If
iZeile = iZeile + 1
Loop
'########################
'## Anzeige der Ergebnisse für jedes gefundene Datum
For currIndex = 0 To maxIndex
currDate = DateAdd("d", currIndex, minDate)
MsgBox "Ergebnis für " & Format(currDate, "dd.mm.yyyy") & ": " & Ergebnisse(currIndex)
Next currIndex
End Sub