VBA - minimalen Wert in Zeile suchen und Spaltenüberschrift ausgeben
Hallo,
ich bräuchte ein Makro, mit dem pro Zeile der geringste Wert (ev. zusätzlich auch der 2. und 3. geringste Wert) ermittelt wird und die Spaltenüberschrift ausgegeben wird. Kann mir da bitte jemand weiterhelfen?
lg fitzin
ich bräuchte ein Makro, mit dem pro Zeile der geringste Wert (ev. zusätzlich auch der 2. und 3. geringste Wert) ermittelt wird und die Spaltenüberschrift ausgegeben wird. Kann mir da bitte jemand weiterhelfen?
lg fitzin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183658
Url: https://administrator.de/forum/vba-minimalen-wert-in-zeile-suchen-und-spaltenueberschrift-ausgeben-183658.html
Ausgedruckt am: 13.05.2025 um 11:05 Uhr
9 Kommentare
Neuester Kommentar
Moin fitzin,
wenn Du z.B. in die Zelle 'A1' die Formelschreibst, so wird aus der gesamten 2. Zeile der Tabelle der kleinste Wert gefunden. Die '1' in der Formel steht für die Rangfolge, also ergibt hier eine '2' den zweitkleinsten Wert.
Soll es komplett in einer Zeile bleiben, so muss in Zelle 'A2' die Formeldie dann die kleinste Zahl aus dem Rest der Zeile 2 findet.
Soll das Ganze pro Spalte funktionieren, so lautet die Formeldie, wie o.a., aber für die Spalte 'A' funktioniert.
Freundliche Grüße von der Insel - Mario
wenn Du z.B. in die Zelle 'A1' die Formel
=KKLEINSTE(A2:IV2;1)
Soll es komplett in einer Zeile bleiben, so muss in Zelle 'A2' die Formel
=KKLEINSTE(B2:IV2;1)
Soll das Ganze pro Spalte funktionieren, so lautet die Formel
=KKLEINSTE(A2:A65536;1)
Freundliche Grüße von der Insel - Mario
Moin fitzin,
nachfolgenden Quellcode auf das Modulblatt des betreffenden Tabellenblattes kopieren.
Die Routine geht davon aus, das Spalte 'A' frei ist, hier wird je Zeile die Zelladresse des ersten von links gefundenen Minimums des in der Variable 'intMinNr' festgelegten Ranges dieser Zeile eingetragen.
[Edit]
Achtung: Bitte Zeile 14 ersetzen durch:
@76109:
Dank für den Hinweis!
[/Edit]
Freundliche Grüße von der Insel - Mario
nachfolgenden Quellcode auf das Modulblatt des betreffenden Tabellenblattes kopieren.
Sub ZeileMinimumAdresse() ' Suche Minimum von links beginnend
Dim strRange As String ' Bereich Zeile von B bis IV
Dim i As Long
Dim intMinNr As Integer
Dim objWks As Object ' Tabellenblatt mit Werten
With Application
Set objWks = .ThisWorkbook.Worksheets(1) ' erstes Tabellenblatt
intMinNr = 1 ' das wievielte Minimum (Rang)
For i = 1 To objWks.Range("B:B").End(xlUp).Row
On Error Resume Next ' eventuelle Leerzeilen erzeugen Fehler
strRange = "B" & i & ":IV" & i ' Spalte A: Adresse des Minimums
objWks.Cells(i, 1) = objWks.Range(strRange).Find(.WorksheetFunction.Small(objWks.Range(strRange), intMinNr), LookAt:=xlWhole, LookIn:=xlValues).Address
Next i
End With
On Error GoTo 0 ' Fehlerbehandlung wieder Standard
End Sub
Die Routine geht davon aus, das Spalte 'A' frei ist, hier wird je Zeile die Zelladresse des ersten von links gefundenen Minimums des in der Variable 'intMinNr' festgelegten Ranges dieser Zeile eingetragen.
[Edit]
Achtung: Bitte Zeile 14 ersetzen durch:
For i = 1 To objWks.Range("B" & Rows.Count).End(xlUp).Row
Dank für den Hinweis!
[/Edit]
Freundliche Grüße von der Insel - Mario

Hallo Mario!
Sorry, aber mit dieser Codezeile
wirst Du wenig Erfolg haben, weil das To-Ergebnis immer 1 ist
Du musst die Zelle angeben, vonderaus nach oben auf die 1. belegte Zelle gezählt wird.
Bedeutet: Von der letzten Zeile aus gesehen, die erste belegte Zelle (von unten nach oben) finden.
Gruß Dieter
PS.
Das .End bezieht sich nicht auf die Letzte Zeile eines Sheets, sondern nur auf eine letzte Zelle mit Inhalt (von oben nach unten oder von unten nach oben).
Beispiel: Zeile 1-5 ist belegt, Zeile 6 ist eine Leerzeile und die Zeilen 7-10 sind wieder belegt, dann:
Sorry, aber mit dieser Codezeile
For i = 1 To objWks.Range("B:B").End(xlUp).Row
Du musst die Zelle angeben, vonderaus nach oben auf die 1. belegte Zelle gezählt wird.
Wks.Cells(Wks.Rows.Count, "B").End(xlUp).Row
Gruß Dieter
PS.
Das .End bezieht sich nicht auf die Letzte Zeile eines Sheets, sondern nur auf eine letzte Zelle mit Inhalt (von oben nach unten oder von unten nach oben).
Beispiel: Zeile 1-5 ist belegt, Zeile 6 ist eine Leerzeile und die Zeilen 7-10 sind wieder belegt, dann:
Line = Cells(1,"B").End(xlDown).Row 'Ab Zeile 1: Ergebnis = 5
Line = Cells(10,"B").End(xlUp).Row 'Ab Zeile 10: Ergebnis = 7
Moin didi1954,
und da man vorab nicht weiß, welche Zeile die letztbelegte ist und welche Excel-Version der Anwender hat, macht man es eben so:
oder so:
es sei, denn, man macht Fehler beim Kopieren, so wie ich oben ...
Freundliche Grüße von der Insel - Mario
und da man vorab nicht weiß, welche Zeile die letztbelegte ist und welche Excel-Version der Anwender hat, macht man es eben so:
Range("B" & Rows.Count).End(xlUp).Row
oder so:
Cells(Rows.Count, "B").End(xlUp).Row
es sei, denn, man macht Fehler beim Kopieren, so wie ich oben ...
Freundliche Grüße von der Insel - Mario