Es gibt allgemein unterscheidliche Lösungsmöglichkeiten.
>> das Tabellenende über einen leeren Eintrag in Spalte A erkannt werden soll
.. läßt darauf schließen, dass die Einträge lückenlos in der Tabelle stehen und einzeln geprüft werden sollen .
(eine bereits fertige Funktion wie z.B. WorksheetFunction.Min() fällt also weg)
Per Schleife kann man hier auf zwei Wegen zum Ziel kommen.
Option Explicit
Sub Beispiel_Endlosschleife_mit_Abbruchbedingung()
Dim rngZelle As Excel.Range
Dim intVkmg As Integer
With Worksheets("Tabelle1")
Set rngZelle = .Range("A1")
intVkmg = .Cells(rngZelle.Row, "G").Value
Do While Trim$(rngZelle.Value) <> ""
If .Cells(rngZelle.Row, "G").Value < intVkmg Then
intVkmg = .Cells(rngZelle.Row, "G").Value
End If
Set rngZelle = rngZelle.Offset(1) 'eine Zelle tiefer 'rutschen'
Loop
Call MsgBox("minimale Verkaufsmenge beträgt " & intVkmg)
End With
End Sub
Sub Beispiel_Zaehlschleife()
Dim rngZelle As Excel.Range
Dim intVkmg As Integer
Dim z As Long
Dim z_max As Long
Dim i As Long
With Worksheets("Tabelle1")
z = 1 'Start in Zeile 1
If Trim$(.Cells(z, "A").Value) = "" Then
'kein(e) Produkt(e) vorhanden
Exit Sub
'Hier wird geprüft ob eine Zeile tiefer noch ein Eintrag vorhanden ist.
'Ohne diesen Test würde man mit Range.End(xlDown) Gefahr laufen
'ans Blattende zu springen.
'(Verhalten von Range-End(xlDown) entspricht der Tastenkombination:
' STRG + PFEILTASTE_UNTEN)
ElseIf Trim$(.Cells(z + 1, "A").Value) <> "" Then
z_max = .Cells(z + 1, "A").End(xlDown).Row
Else
z_max = 1 'nur ein Produkt vorhanden
End If
intVkmg = .Cells(z, "G").Value
For i = z To z_max
If .Cells(i, "G").Value < intVkmg Then
intVkmg = .Cells(i, "G").Value
End If
Next
Call MsgBox("minimale Verkaufsmenge beträgt " & intVkmg)
End With
End Sub
PS: Trim$() entfernt Leerzeichen am Anfang und Ende der Zeichenkette.
|