Schleife mit if abfrage

Hallo,

ich kenne mich leider in VB fast gar nicht aus, muss mich aber gezwungener maßen damit auseinandersetzen, da es in Excel keine Schleifen-Funktion gibt.

Mein Problem:
Ich habe eine Liste von Werten und einen Wertebereich.

Beispiel:
A B
1|Kundennummer menge
2|701398 11.712
3|11067 10.249
4|813708 4.900
5|623302 2.440

Wertebereich: 4.000 - 6.000

jetzt suche ich einen Wert der in diesen Bereich enthalten ist.
Im Beispiel oben wäre es die Zelle B4.

Von der Logik her müsste es so gehen:
x=1
LOOP
exit when x=? //Abruchbedingung sollte letzter Datensatz sein
IF Bx BETWEEN 4.000 AND 6.000
ergebnis = Bx
ELSEIF x=x+1
END LOOP

Anmerkung: Mein Logikansatz sollte helfen um mein Problem zu schildern. Ihr kennt das ja, es ist nicht immer leicht das Problem unmissverständlich darzustellen.

Ich hoffe Ihr könnt mir weiterhelfen
LG
Mari

Hi Mariel,

da es in Excel keine Schleifen-Funktion gibt.

ist mir neu :smile:

A B
1|Kundennummer menge
2|701398 11.712
3|11067 10.249
4|813708 4.900
5|623302 2.440

Wertebereich: 4.000 - 6.000

jetzt suche ich einen Wert der in diesen Bereich enthalten
ist.
Im Beispiel oben wäre es die Zelle B4.

Option Explicit

Sub tt()
Dim Z As Long, Erg
Erg = "Nichts gefunden"
For Z = 2 To Cells(Rows.Count, 2).End(xlUp).Row 'kl. Problem wenn B55536 nicht leer oder Spalte B leer
 If Cells(Z, 2).Value \>= 4000 And Cells(Z, 2).Value 
Ungetestet ging es evtl mit der Excelfunktion Sverweis schneller direkt ohne Schleife, müßte man austesten ob man das hinkriegt.
Die Excelfunktion 
=sverweis(6001;"A1:B1000";2;wahr)
wird dann in Vba so eingesetzt: 
Erg = Application.WorksheetFunction.VLookup(6001, Range("A2:B10000"), 2, True)
Die Hilfserklärungen zu den 4 Parametern gelten aber weiter und grad den letzten muß man sich anschauen um zu sehen nach welchem der Wertebereichseckwerte (3999,4001,5999,6001,o.ä) man suchen müßte um B4 zu finden und dann B4 vnoch mit dem anderen Eckwert zu vergleichen.

Was soll eigentlich geschehen wenn mehrere zellen in den Wertebereich passen?
Gruß
Reinhard 

Hi Mariel,

da es in Excel keine Schleifen-Funktion gibt.

ist mir neu :smile:

Ich denke, er meint für diese Formelzeile oben in Excel…

A B
1|Kundennummer menge
2|701398 11.712
3|11067 10.249
4|813708 4.900
5|623302 2.440

Wertebereich: 4.000 - 6.000

jetzt suche ich einen Wert der in diesen Bereich enthalten
ist.
Im Beispiel oben wäre es die Zelle B4.

Option Explicit

Sub tt()
Dim Z As Long, Erg
Erg = „Nichts gefunden“
For Z = 2 To Cells(Rows.Count, 2).End(xlUp).Row 'kl. Problem
wenn B55536 nicht leer oder Spalte B leer
If Cells(Z, 2).Value >= 4000 And Cells(Z, 2).Value

sub tt2()
Dim I As Long
Dim Erg()
redim Erg(0)
I=2
do
 if Cells(I, 2).Value = "" then exit do
_'So frage ich immer ab, ob ich ein Feld erreicht habe, wo nichts  
 'mehr drin steht --\> leer_  
 If Cells(I, 2).Value \>= 4000 And Cells(I, 2).Value
 Redim PreServe Erg(Ubound(Erg) + 1)
 Erg(Ubound(Erg)) = Cells(I, 2).Value
 End IF
 I = I + 1
loop
end sub

liefert dir in einem Array alle Ergebnisse zwischen 4000 und 6000.
Auslesen per:
For I = 1 to Ubound(Erg)
Irgendwas = Erg(I)
Next I

Was soll eigentlich geschehen wenn mehrere zellen in den
Wertebereich passen?

Sollte damit abgedeckt sein

Gruß,
AlexR

Herzlichsten Dank Ihr beiden,

@Reinhard - ich habe deinen Code gleich zum laufen gebracht - quasi meine erste funktion in VB. Somit habe ich also ‚Hallo Welt‘ einfach übersprungen :smile:

@AlexR - wie kann ich die ergebnisse ausgeben lassen?

Was soll eigentlich geschehen wenn mehrere zellen in den
Wertebereich passen?

Sollte damit abgedeckt sein

Ideal wäre es, wenn ich immer den höchstmöglichen Wert nehme. Da die Werte absteigend sortiert sind, wird sowieso der höchste Wert genommen. Nehme ich zumindest an…

Ich hab noch 2 Fragen -
Frage 1:
Wie schaut die Abfrage aus, wenn ich den Wertebereich in einem Tabellenblatt und die Werte in einen anderen Tabellenblatt habe?

Frage 2:
Nehmen wir an der Wertebereich wäre nun 15.000 - 17.000.
Dann möchte ich, dass 2 Werte adiert werden und somit in den Wertebereich fallen.
Im Beispiel wäre es B2+B4.
Ist das machbar?

Grüße,
MB

sub tt2()
Dim I As Long
Dim Erg()
redim Erg(0)
I=2
do
if Cells(I, 2).Value = „“ then exit do
'So frage ich immer ab, ob ich ein Feld erreicht habe, wo
nichts
'mehr drin steht --> leer

If Cells(I, 2).Value >= 4000 And Cells(I, 2).Value
Redim PreServe Erg(Ubound(Erg) + 1)
Erg(Ubound(Erg)) = Cells(I, 2).Value
End IF
I = I + 1
loop
end sub

liefert dir in einem Array alle Ergebnisse zwischen 4000 und
6000.
Auslesen per:
For I = 1 to Ubound(Erg)
Irgendwas = Erg(I)
Next I

Hallo Alex,
sehr pfiffig mit
Redim PreServe Erg(Ubound(Erg) + 1)
Manchmal, eher oft, frage ich mich schon warum ich auf sowas Naheliegende nicht komme :frowning:
Ist deshalb das redim Erg(0) nötig?, muß das mal testen
Ansonsten nahm ich bislang, ab jetzt natürlich anders :smile:

Anz=Anz+1
Redim preserve Erg(Anz)
Erg(Anz)=…

Deine Variante ist chicker.

Was soll eigentlich geschehen wenn mehrere zellen in den
Wertebereich passen?

Sollte damit abgedeckt sein

Jepp.

Und zu der einen Nachfrage, anstatt
Irgendwas = Erg(I)
Msgbox Erg(I)
oder auch
cells(I,3)=Erg(I)
oder wenn das schiefläuft
cells(I+1,3)=Erg(I)
dann wird das in Spalte C (A=1,B=2,C=3,…) aufgelistet
Ich benutze sowieso sehr gerne Option Base 1, weil das mit der Null mich irritiert, aber das hatte nun nix mit der eigentlichen Anfrage zu tun *gg*

Gruß
Reinhard

Frage 2:
Nehmen wir an der Wertebereich wäre nun 15.000 - 17.000.
Dann möchte ich, dass 2 Werte adiert werden und somit in den
Wertebereich fallen.
Im Beispiel wäre es B2+B4.
Ist das machbar?

Hi Mariel,
machbar schon, aber woher soll das Makro wissen welche Werte es addieren soll? Alle Kombinationen durchspielen die als Ergebnis irgednwas zwischen 15 und 17 Mille ergeben?

Zur anderen Nachfrage, ist dem Makro Wurscht wo was steht.
Dem Code ist das egal ob ich sage
UntererWertepunkt=4000
oder
UntererWertepunkt=Worksheets(„AndersBlatt“).Range(„E5“)
wo halt die 4000 drinstehen.
Gruß
Reinhard

Hi Mariel,
machbar schon, aber woher soll das Makro wissen welche Werte
es addieren soll? Alle Kombinationen durchspielen die als
Ergebnis irgednwas zwischen 15 und 17 Mille ergeben?

Nicht alle, im Prinzip nur einen.
Die Schleife müsste den 1.Wert, der unterhalb des Wertebereiches liegt, mit den 2.Wert adieren und schauen ob er im Wertebereich liegt. Wenn nicht, dann den 1.Wert + den 3.Wert, usw.

Irgendwie so, wenn ich mich nicht irre:

DIM i AS long
i=2
DO
i=i+1
IF Cell(2,2)+ Cell(i,2) =>15000 AND Cell(2,2)+ Cell(i,2)