Registriert seit: 01.03.2016
Version(en): 2016
Hallo liebe Experten,
ich habe eine Variable x und ein Feld vbFeld = (10, 12, 16, 20, 24, 30). Der Wert der Variablen x ist derzeit 12. Da x nur Werte aus dem Feld vbFeld annehmen darf, wäre der nächste Werte für x = 16 und der übernächste 20.
Meine Frage ist jetzt, wie berechne ich den nächsten Wert von x aufgrund der gegebenen Einschränkung?
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
Hallo, Zitat:Meine Frage ist jetzt, wie berechne ich den nächsten Wert von x aufgrund der gegebenen Einschränkung? ich kann in Deinem Posting keine Einschränkung entdecken und darum wahrscheinlich ... genausowenig wie Excel ... entscheiden, wann der nächste Sprung stattfinden wird. Wodurch soll der nächste Sprung angestoßen werden? Es kann ja auch sein, daß ich was überlesen habe, aber ich kann wirklich nichts entdecken. Zitat:Der Wert der Variablen x ist derzeit 12. Da x nur Werte aus dem Feld vbFeld annehmen darf, wäre der nächste Werte für x = 16 und der übernächste 20.
Registriert seit: 01.03.2016
Version(en): 2016
Hallo Kapitän, du hast Recht. Formulierungsfehler.
Für das Feld gilt vbFeld = Array (10, 12, 16, 20, 24, 30).
wenn x = 12 ist und x nur Werte des Feldes vbFeld annehmen darf, wie berechne ich mittels VBA Code den nächsten Wert von x, also x = 16?
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
18.06.2016, 16:59
(Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2016, 16:59 von RPP63.)
Moin Anne! Absichtlich eher umständlich, da ja sicherlich mehr dahintersteckt: Sub Anne()
Dim vbFeld, x As Byte, cnt As Byte
vbFeld = Array(10, 12, 16, 20, 24, 30)
x = 12
For cnt = 0 To 5
If vbFeld(cnt) = x Then
If cnt < 5 Then
x = vbFeld(cnt + 1)
Exit For
Else
MsgBox "Ende der Fahnenstange!"
End If
End If
Next
End Sub Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 24.05.2016
Version(en): 2007
Hallöchen, ich würde es folgendermaßen machen: Code: Sub x_werte_in_Feldabhängigkeit() 'x darf nur Werte des Feldes vbFeld annehmen Dim x As Integer x = 12 'frei wählbar innerhalb der Werte von vbFeld vbFeld = Array(10, 12, 16, 20, 24, 30)
For i = 0 To UBound(vbFeld) 'Nächsten x Wert berechnen: If vbFeld(i) = x Then x = vbFeld(i + 1): Exit For 'Wenn x = 30, alles zurück auf Anfang If x = vbFeld(UBound(vbFeld)) Then x = vbFeld(0): Exit For Next i
Debug.Print "Nächster x-Wert: " & x
End Sub
Aber vielleicht gibt's ja noch eine Genielösung.
Registriert seit: 24.05.2016
Version(en): 2007
Alternative: Code: Sub x_werte_in_Feldabhängigkeit2() Dim i, x x = 12 vbFeld = Array(10, 12, 16, 20, 24, 30)
Do While Not vbFeld(i) = x i = i + 1 Loop Debug.Print vbFeld(i + 1)
End Sub
Registriert seit: 24.05.2016
Version(en): 2007
kleine Ergänzung: Code: Sub x_werte_in_Feldabhängigkeit3() Dim i As Integer, x As Integer x = 30 'beliebiger Wert für x innerhalb von vbFeld vbFeld = Array(10, 12, 16, 20, 24, 30)
Do While Not vbFeld(i) = x: i = i + 1: Loop i = IIf(i = UBound(vbFeld), 0, i + 1) Debug.Print vbFeld(i)
End Sub
Registriert seit: 29.09.2015
Version(en): 2030,5
18.06.2016, 21:11
(Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2016, 21:11 von snb.)
Code: sub M_snb() sn = Array(10, 12, 16, 20, 24, 30) x=12
y=sn(application.match(x,sn,0)) End Sub
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• Lago
Registriert seit: 01.03.2016
Version(en): 2016
Euch allen vielen Dank für eure Bemühungen und ein spezielles Dankeschön für die beste Lösung an snb.
Registriert seit: 24.05.2016
Version(en): 2007
als Bastler ergänz ich mal das Hin- und Herlaufen von Werten innerhalb der Feldgrenzen mittels von snb angegebener Formel. Code: Sub Hin_und_herlaufen_innerhalb_der_Feldgrenzen_Demo() '5. Feldwert des Array beliebig, reine Programmiertechnik vbs = Array(10, 12, 15, 19, 2000) vbi = 12
'vbi läuft innerhalb der Feldgrenzen von 10 bis 19 hin und her For i = 1 To 10 vbi = IIf(Application.Match(vbi, vbs) = _ UBound(vbs), 10, vbs(Application.Match(vbi, vbs))) Debug.Print vbi Next
End Sub
|