2.3k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,
ich habe in einer Spalte eine variable Anzahl von Werten und möchte jeweils den kleinsten freien ermitteln, also den kleinsten Wert, der in der Datenreihe noch nicht vorhanden ist.
Hat jemand einen Tipp? Danke und Gruß! A.

18 Antworten

0 Punkte
Beantwortet von computerschrat Profi (32.3k Punkte)
Hallo ahorn,

die Frage ist mir nicht ganz klar. Suchst du den kleinsten Wert in der Datenspalte, dann findest du den mit MIN()
Der kleinste noch nicht in der Reihe vorhandene Wert ist ein Increment größer als minus Unendlich :-). Den Wert suchst du aber vermutlich nicht. Der kleinste Wert betragsmäßig ist 0 aber das ist wahrscheinlich auch nicht dein Ziel.

Was suchst du wirklich?

Gruß
computerschrat
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,
ein einfaches Beispiel. Aus der Datenreihe (je ein Wert pro Zelle) 1,2,3,5,6,8,10 würde ich den Wert "4" suchen.
A.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi andeas ^^

bilde die nicht vorhandenen summen ueber eine schleife (vorige sortierung)und du hast den kleinsten wert :-)

gruss nighty
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
... kannst du das noch mit einem Wort erläutern...?
Gruß
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Andreas ^^

eine mögliche variant

gruss nighty

Sub Kleinste()
Dim Index As Long, Zaehler As Long
Columns("A:A").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ReDim Datt(ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row - 1) As Variant
Datt() = Range("A2:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row)
For Zaehler = LBound(Datt()) To UBound(Datt()) - 1
Index = Index + 1
If Index > Datt(Zaehler, 1) And Index < Datt(Zaehler + 1, 1) Then
Range("B2") = Index
Exit For
End If
Next Zaehler
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Andreas ^^

1 zeile ueberschrift

bei der variablen Index kannst du eine andere Schrittweite angeben

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ops ... hatte die 1 vergessen

gruss nighty

Sub Kleinste()
Dim Index As Long, Zaehler As Long
Columns("A:A").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ReDim Datt(ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row - 1) As Variant
Datt() = Range("A2:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row)
For Zaehler = LBound(Datt()) To UBound(Datt()) - 1
Index = Index + 1
If Index > Datt(Zaehler, 1) And Index < Datt(Zaehler + 1, 1) Or Index = 1 And Datt(Zaehler, 1) > Index Then
Range("B2") = Index
Exit For
End If
Next Zaehler
End Sub
0 Punkte
Beantwortet von
Hallo,

In Spalte A1 bis ? stehen die Werte (wie in AW2 beschrieben).

Formel in B2 für die laufende Nummerierung in 1 er Schritten:

=WENN(A2-1=A1;"";"fehlend: "&A1+1&" bis "&A2-1)

und runterkopieren bis?

für 2er Schritte ((z.B. 2,4,6, 8... usw):

ebenso Formel in B2:

=WENN(A2-2=A1;"";"fehlend: "&A1+2&" bis "&A2-2)

und runterkopieren bis?

Gruß
Paul1
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,

danke für eure Tipps!! Die Formel funktioniert einwandfrei. Nachteil ist allerdings, dass ich sie mehrfach kopieren muss.
Ich habe in der Zwischenzeit folgendes probiert:
KKLEINSTE(WENN(ZÄHLENWENN(INDIREKT("$A$1:A" & BereichHistorie);ZEILE(INDIREKT("$A$1:G" & BereichHistorie)))=0;ZEILE(INDIREKT("$A$1:A" & BereichHistorie)));1)


Nighty, bei deinem Code kriege ich als Ergebnis immer den kleinsten Wert der Daten , nicht aber den kleinsten freien Wert...?

Gruß A.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
War ein Schreibfehler drin:
KKLEINSTE(WENN(ZÄHLENWENN(INDIREKT("$A$1:A" & BereichHistorie);ZEILE(INDIREKT("$A$1:A" & BereichHistorie)))=0;ZEILE(INDIREKT("$A$1:A" & BereichHistorie)));1))
...