(VBA) Min- und Maxwert

Guten morgen,

ich möchte gerne aus einer Spalte den Min- und Maxwert ermitteln. Kann mir einer sagen, wie das mit VBA geht?

Kerstin

so einfach ist das :smile:
Sub Minimum()
MsgBox WorksheetFunction.Min(Range(„A:A“))
End Sub

Sub Maximum()
MsgBox WorksheetFunction.Max(Range(„A:A“))
End Sub

Danke!

Manchmal steht man halt wie der Ochs vorm Berg…

jetzt habe ich es gerade mal getestet und festgestellt, daß da irgendetwas nicht richtig läuft…

Minwert stimmt, 30.08.2004, aber der Maxwert paßt nicht. Hier wird der 07.01.2005 angezeigt, dabei sollte das eigentlich der 30.03.2005 sein. Wie kommt das? Der 30.03. kommt doch nach dem 07.01.???

Hallo,
hast du mal die Formate der Zahlen überprüft?
Könnte Text mit numerischen Werten vermischt sein ?

Gruß Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,
hast du mal die Formate der Zahlen überprüft?
Könnte Text mit numerischen Werten vermischt sein ?

Gruß Peter

Nein, Text steht in dem Bereich definitiv nicht drin. Die Zeilen werden aus einem anderen Tabellenblatt herausgesucht und in die Statistik geschrieben.

Hier der Programmcode, der die Min- und Maxwerte raussuchen soll:

With Worksheets("Statistik")
If chkDatum.Value = True Then 
 .Cells(3, 2) = DatumStart 
 .Cells(4, 2) = DatumEnde
Else 
 .Cells(3, 2) = WorksheetFunction.Min(Range(Cells(7, 5), Cells(ZeileStatistik, 5))) 
 .Cells(4, 2) = WorksheetFunction.Max(Range(Cells(7, 5), Cells(ZeileStatistik, 5)))
End If
End With

Das vorhin der Minwert stimmte, war übrigens nur Zufall.

Oder muß ich, um die Funktionen nutzen zu können, doch erst das entsprechende Tabellenblatt aktivieren? Das wäre allerdings nicht so schön…

Hallo Kerstin,

scheint mir ein wenig kompliziert zu sein.
Hier einmal ein einfaches Beispiel:
In Tabelle " Statistik" stehen in Spalte C2 : C8 verschiedene Datumswerte.
In Tabelle " Tabelle2" wird in D2 der MIN Wert und in E2 der Max Wert ausgelesen.
Hier der Code:

Sub Makro2()

 Sheets("Tabelle2").Select
 Range("D2").Select
 ActiveCell.FormulaR1C1 = "=MIN(Statistik!RC[-1]:R[6]C[-1])"
 Range("E2").Select
 ActiveCell.FormulaR1C1 = "=MAX(Statistik!RC[-2]:R[6]C[-2])"
 Range("E3").Select

End Sub

Vielleicht hilft das ja schon.

Gruß Peter

Das soll ein einfaches Beispiel sein? Ne, tut mir leid, da versteh ich ja gar nix :frowning:

Kerstin

.Cells(3, 2) = WorksheetFunction.Min(Range(Cells(7, 5),
Cells(ZeileStatistik, 5)))

Was ist der Inhalt von „ZeileStatistik“?
vielleicht wird eine falsche Range markiert…

Oder muß ich, um die Funktionen nutzen zu können, doch erst
das entsprechende Tabellenblatt aktivieren? Das wäre
allerdings nicht so schön…

jein… Entweder Du gibst das richtige Tabellenblatt mit an oder Du musst es aktivieren. Da Du es nicht mitgibst denke ich ist hier Dein fehler zu suchen…

mal ein Beispiel:

Sub msgox()
 zielzelle = "A1"
 msgbox "Das aktivierte Blatt hat in " & zielzelle & " den Inhalt: " & Range(zielzelle).Value & Chr(10) & "Im Tabellenblatt 'Tabelle1' steht der Inhalt: " & Range("'Tabelle1'!" & zielzelle).Value
End Sub

Was ist der Inhalt von „ZeileStatistik“?
vielleicht wird eine falsche Range markiert…

ZeileStatistik gibt die letzte gefüllte Zeile wieder - passt 100%ig.

Oder muß ich, um die Funktionen nutzen zu können, doch erst
das entsprechende Tabellenblatt aktivieren? Das wäre
allerdings nicht so schön…

Damit meinte ich eigentlich, ob das Tabellenblatt angezeigt werden muß.

Durch „With Worksheet“ gebe ich ja schon an, daß die Berechnung mit einem anderen Arbeitsblatt erfolgt. Habe jetzt auch in der „Range“ den Punkt vor Cells gesetzt:

With Worksheets("Statistik")
If chkDatum.Value = True Then
 .Cells(3, 2) = DatumStart
 .Cells(4, 2) = DatumEnde
Else
 .Cells(3, 2) = WorksheetFunction.Min(Range(.Cells(7, 5), .Cells(ZeileStatistik, 5)))
 .Cells(4, 2) = WorksheetFunction.Max(Range(.Cells(7, 5), .Cells(ZeileStatistik, 5)))
End If
End With

Jetzt ist das Ergebnis von DatumStart und DatumEnde 00.01.1900
(Richtig wäre 25.01.2005 bzw. 09.02.2005)

Ist das jetzt evtl. nur noch ein Formatierungsproblem?

Kerstin

Hallo Kerstin,

Die Bearbeitung von Datumsangaben mit VBA aus Tabellen, die nicht in US-englisch erstellt sind, bereitet Probleme. Ich habe mit so einem Problem auch schon mal gekämpft, muß meine Lösung aber noch erst wiederfinden. Ich hoffe dir morgen weiterhelfen zu können.

Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Kerstin,

Ist das jetzt evtl. nur noch ein Formatierungsproblem?

Vermutlich ist es kein Formatierungsproblem. In welchem Format ein Datum in Excel angezeigt wird, hat keinen Einfluss auf Berechnungen, auch nicht auf Min und Max. Wichtig ist allein, dass es sich wirklich um Datumswerte handelt. Ein Datum ist in Excel eine positive ganze Zahl. 1 entspricht dem 1.1.1900, für jedes andere Datum ist die Zahl der Tage seit diesem Anfangsdatum (z. B. 11 für den 11.01.1900, 38.443 für den 01.04.2005, 38.444 für den 02.04.2005). 2.958.465 steht für das größte darstellbare Datum, den 31.12.9999.

Durch diese Darstellung wird erreicht, dass sich mit Datumswerten gut rechnen lässt (z. B. „3 Tage später“ einfach mit +3).

Wenn in einer Zelle ein Datum steht, kann man leicht feststellen, welcher Zahl dieses Datum entspricht. Dazu muss man nur dieser Zelle das Format „Standard“ oder „Zahl“ geben (lässt sich ja wieder rückgängig machen). Wenn jetzt keine ganze Zahl (in diesem Jahr in der Größenordnung zwischen 38.353 und 38.717) angezeigt wird, kann man daraus schließen, dass in der Zelle gar kein (Excel-)Datum steht, sondern etwas, das so aussieht wie ein Datum. In der folgenden Tabelle stehen in den Zeilen 3 bis 6 in der ersten Spalte vier Werte, die wie ein normales Datum aussehen:

 | A | B | C | D |
---|-------------|----------------|--------------|---------------|
 1 | angezeigtes | Format | umformatiert | formatiert |
 2 | „Datum“ | in Spalte A | (Standard) | spez. Datum |
 3 | 04.08.2003 | Datum | 37837 | 04. Aug. 03 |
 4 | 05.08.2003 | Text (@) | 05.08.2003 | 05.08.2003 |
 5 | 06.08.2003 | Standard | 06.08.2003 | 06.08.2003 |
 6 | 07.08.2003 | 00"."00"."0000 | 7082003 | ############# |

Benutzte Formeln:
C3 : =A3
C4 : =A4
C5 : =A5
C6 : =A6
D3 : =A3
D4 : =A4
D5 : =A5
D6 : =A6

Aber nur der 04.08.2003 in Zeile 3 ist ein richtiges Datum. In Spalte B ist eingetragen, welches Format die Zelle in Spalte A hat. Der 05.08.2003 und der 06.08.2003 in der Tabelle sind Zeichenfolgen. (Bei Eingabe des 06.08.2003 hatte ich ein Hochkomma (‚) vorangestellt.) In Zeile 6 habe ich die Zahl 7082003 eingegeben und der Zelle dann das Format in Spalte B verpasst, damit sie so aussieht wie ein Datum.

In Spalte C sieht man, wie der Wert aus Spalte A im Standardformat aussieht. Nur in Zeile 3 erscheint die „richtige“ Zahl 37837. In den Zeilen 4 und 5 bleiben die Zeichenfolgen unverändert stehen, in Zeile 6 wird die eingegeben Zahl nur unformatiert dargestellt.

Einen ganz netten Test, ob eine Zelle ein Datum enthält oder nicht, enthält Spalte D. Die gesamte Spalte hat das Format „TT. MMM. JJ“, der Monat soll also mit drei Anfangsbuchstaben angezeigt werden, das Jahr zweistellig. Man sieht: Nur das Datum in Zeile 3 wird richtig dargestellt.

Wenn man nun in einer Tabelle viele falsche Datumswerte stehen hat, mit denen Excel nicht wie gewünscht umgehen kann, muss man die falschen Werte in richtige umwandeln. In der folgenden Fortsetzung der obigen Tabelle geschieht das mit der Funktion DATWERT in Spalte A:

 | A | B | C | D |
---|-------------|----------------|--------------|---------------|
 8 | korrigiert | Format | unformatiert | formatiert |
 9 | in Datum | in Spalte A | (Standard) | spez. Datum |
10 | 04.08.2003 | Datum | 37837 | 04. Aug. 03 |
11 | 05.08.2003 | Datum | 37838 | 05. Aug. 03 |
12 | 06.08.2003 | Datum | 37839 | 06. Aug. 03 |
13 | 07.08.2003 | Datum | 37840 | 07. Aug. 03 |

Benutzte Formeln:
A10: =A3 (hier war nichts zu ändern)
A11: =DATWERT(A4)
A12: =DATWERT(A5)
A13: =DATWERT(TEXT(A6;"00-00-0000"))

Die Spalten B bis D sind genauso wie im ersten Teil der Tabelle.

Beim „normalen“ Arbeiten mit Excel treten mit dem Datum (analog auch mit der Uhrzeit) keine Probleme auf. Wenn man in eine „Standard“-formatierte Zelle etwas eingibt, das Excel als Datum versteht (z. B. „3.4.5“ - ohne die Gänsefüßchen), speichert Excel in der Zelle eine ganze Zahl, formatiert die Zelle als Datum und zeigt das Datum (hier z. B. 03.04.2005) an.

Probleme treten u. a. dann auf, wenn man in eine vorher als Text formatierte Zelle ein Datum eingibt. Dann speichert Excel einfach die eingegeben Zeichenkette, ohne sie als Datum zu erkennen. Konvertierungen (wie oben mit DATWERT) sind oft auch dann nötig, wenn Daten z. B. aus Textdateien übernommen werden.

Ich hoffe, mein Geschreibsel hilft dir bei der Lösung deines Problems ein wenig.
Grüße aus Kamp-Lintfort
Erich Gier

1 Like

Hallo Erich,

vielen Dank für die Mühe!

Genau das ist die Lösung. Es wurde zwar ein „Datum“ angezeigt, allerdings kein „echtes Datum“. Der Test mit dem Format „TT.MMM.JJ“ ist echt gut.

Nun mußte ich bei allen Datensätzen nur das Datum manuell ändern (sind ja nur 1200 Stück) und im Formular für das Eintragen neuer Datensätze das „Datum“ in ein „richtiges Datum“ konvertieren. Ist ja ganz einfach mit CDate(lblDatum).

Echt Spitze!!!

Kerstin