Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Anzahl jeweiliger Elemente zählen...

Forumthread: Anzahl jeweiliger Elemente zählen...

Anzahl jeweiliger Elemente zählen...
16.12.2003 15:57:56
vegaS
ich kann mir nich vorstellen, dass das soo kompliztiert ist!

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

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Alternativvorschlag: Pivot-Tabelle
16.12.2003 16:03:10
ChrisL
Hi vegaS

Habe dein Makro nicht nachvollzogen, aber ich frage mich wieso du nicht einfach eine Pivot-Tabelle verwendest. Evtl. kannst du die Daten vorher mit dem Autofilter "sieben" wegen dem "YES" und Name. Mit den verbleibenden Daten lässt du dann den Pivot-Report rattern.

Gruss
Chris
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige