Anzeige
Archiv - Navigation
1164to1168
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Auswertung Datum (max und min aus Bereich)

Auswertung Datum (max und min aus Bereich)
Peter
Guten Tag
Aus einer Spalte mit lauten Daten ermittle ich mit worksheetfunction.Min(range("psdatum")) und worksheetfunction.Max(range("psdatum")) das "tiefste" und das "höchste" Datum. (ergibt beispielsweise die Werte 39816 (3.1.2009) und 40358 (29.6.2010).
Nun möchte ich ausgehend von diesen Daten in der Tabelle Auswertung ab in Zeile 3 (ab Spalte E) ausgehend vom tiefsten Datum den ersten Tag des entsprechenden Monats als Datum eintragen und in Zeile 4 (ab Spalte E) den letzten Tag des entsprechenden Monats als Datum eintragen. Das letzte Datum in Zeile 3 soll der erste Tag des Monats vom höchsten Datum sein; in Zeile 4 soll der letzte Tag des entsprechenden Monats eingetragen werden.
Im vorliegenden Beispiel sollte in
Zelle E3 1.1.2009 und in Zelle E4 31.1.2009,
Zelle F3 1.2.2009 und in Zelle F4 28.2.2009,
...
Zelle V3 1.6.2010 und in Zelle V4 30.6.2010
Mir ist nicht ganz klar, wie man das mit VBA auf die Reihe kriegt.
Wer kann mir helfen?
Danke, Peter

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Auswertung Datum (max und min aus Bereich)
03.07.2010 13:03:18
ransi
Hallo Peter
Versuch mal sowas:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit


Public Sub test()
Dim out() As Variant 'Ausgabe Array
Dim Z As Integer 'Ein Zähler
Dim minDatum As Date
Dim maxDatum As Date
Z = 1
Redim Preserve out(1 To 2, 1 To Z)
minDatum = WorksheetFunction.Min(Sheets("Tabelle1").Range("A:A"))
maxDatum = WorksheetFunction.Max(Sheets("Tabelle1").Range("A:A"))
out(1, Z) = Format(DateSerial(Year(minDatum), Month(minDatum), 1), "DD.MM.YY") 'Monatsersten
out(2, Z) = Format(DateSerial(Year(minDatum), Month(minDatum) + 1, 0), "DD.MM.YY") 'Monatsletzten

Do
    Z = Z + 1
    Redim Preserve out(1 To 2, 1 To Z)
    out(1, Z) = Format(DateSerial(Year(minDatum), Month(minDatum) + Z - 1, 1), "DD.MM.YY")
    out(2, Z) = Format(DateSerial(Year(minDatum), Month(minDatum) + Z, 0), "DD.MM.YY")
Loop Until out(1, Z) = Format(DateSerial(Year(maxDatum), Month(maxDatum), 1), "DD.MM.YY") 'Bis der Monatserste von minDatum =der Monatserste von maxDatum

Sheets("Tabelle1").Range("E3").Resize(2, UBound(out, 2)) = out 'Ausgeben
End Sub


Weils draußen so warm und ich so faul bin, ohne irgendeine Fehlerbehandlung ;-)
ransi
Anzeige
AW: Auswertung Datum (max und min aus Bereich)
03.07.2010 13:21:56
Peter
Hallo Ransi
Super, vielen Dank.
Gruss, Peter
AW: Auswertung Datum (max und min aus Bereich)
03.07.2010 23:27:23
Peter
Hallo Ransi
Darf ich noch drei Anschlussfragen stellen:
1. Was wird mit dem 2. Redim Preserve out (1 to 2, 1 to Z) bewirkt?
2. Was muss ich ändern, dass die in den Zellen eingetragenen Daten serielle Zahlen sind, die nur als Datum angezeigt werden?
3. Was müsste geändert werden, damit die nicht zwei Zeilen nach hinten abgefüllt werden, sondern zwei Spalten nach unten?
Möchte mich gerne an das Arbeiten mit Arrays näher antasten, bin aber noch ganz am Anfang.
Eine gelegentliche Antwort wäre super.
Danke und Gruss, Peter
Anzeige
AW: Auswertung Datum (max und min aus Bereich)
04.07.2010 10:23:44
fcs
Hallo Peter,
1. Was wird mit dem 2. Redim Preserve out (1 to 2, 1 to Z) bewirkt?
Die Größe des Arrays ist zu Beginn der Do-Loop-Schleife noch nicht bekannt. Deshalb muss das Array bei jedem Schleifendurchlauf vergrößert werden. Deshalb diese Anweisung inklusive des Parametrs "Preserve", der dafür sorgt, dass die schon im Array vorhandenen Werte nicht gelöscht werden.
Durch starten des Zählers bei Z=0 kann man auf die 1. ReDim-Anweisung aber auch ganz verzichten.
2. Was muss ich ändern, dass die in den Zellen eingetragenen Daten serielle Zahlen sind, die nur als Datum angezeigt werden?
1. Array-Variable als Long deklarieren
2. Die Werte ohne Formatierung ins Array schreiben
3. Was müsste geändert werden, damit die nicht zwei Zeilen nach hinten abgefüllt werden, sondern zwei Spalten nach unten?
Dazu müssen im Resize-Parameter des auszufüllenden Bereichs Zeilen und Spalten getauscht werden und das Array muss transponiert (Zeile/Spalten vertauscht) werden.
Gruß
Franz
Public Sub test()
Dim out() As Long 'Ausgabe Array
Dim Z As Integer 'Ein Zähler
Dim minDatum As Date
Dim maxDatum As Date
minDatum = WorksheetFunction.Min(Sheets("Tabelle1").Range("A:A"))
maxDatum = WorksheetFunction.Max(Sheets("Tabelle1").Range("A:A"))
Z = 0
Do
Z = Z + 1
ReDim Preserve out(1 To 2, 1 To Z)
out(1, Z) = DateSerial(Year(minDatum), Month(minDatum) + Z - 1, 1) 'Monatsersten
out(2, Z) = DateSerial(Year(minDatum), Month(minDatum) + Z, 0) 'Monatsletzten
'Bis der Monatserste = der Monatserste von maxDatum
Loop Until out(1, Z) = CLng(DateSerial(Year(maxDatum), Month(maxDatum), 1))
'Zeilenweise Ausgabe des Ergebnisses, dazu muss Array Transponiert werden
Sheets("Tabelle1").Range("E3").Resize(UBound(out, 2), 2) _
= Application.WorksheetFunction.Transpose(out) 'Ausgeben
End Sub

Anzeige
AW: Auswertung Datum (max und min aus Bereich)
05.07.2010 08:14:35
Peter
Hallo Franz
Vielen Dank für die ausführliche Antwort.
Ich konnte das so umsetzen.
Gruss, Peter

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige