Nichtdiskrete Zunahme einer Variablen
#1
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?
Top
#2
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.
Top
#3
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?
Top
#4
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)
Top
#5
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.
Top
#6
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
Top
#7
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
Top
#8
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:
  • Lago
Top
#9
Euch allen vielen Dank für eure Bemühungen und ein spezielles Dankeschön für die beste Lösung an snb.
Top
#10
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
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste