Supportnet / Forum / Tabellenkalkulation
Variable variabel definieren VBA?
Frage
Hallo Jungs,
mal wieder eine wahrscheinlich recht einfache Frage für die mir derzeit aber ne akzeptable Lösung fehlt.
Ich habe eine für meine Verhältnisse recht komplexe Wenn dann schleife ...
Als Ergebniss ergibt die Formel beispielsweise die Zahl 2.
Sollte die Zahl 2 berechnet werden möchte ich das VBA mit der Variablen X2 weiterrechnet, sollte 5 rauskommen eben mit der variabeln X5 usw.
Sozusagen eine Variablenauswahl nach dem Ergebniss der Berechnung ...
Hoffe da hat jemand ne Idee wie man das Lösen kann ...
mfg und danke schonmal ...
Antwort 1 von m-o-m
Moin,
wieso brauchst Du denn ´ne VBA-Lösung? Du hast doch dein Ergebnis. Greif doch einfach aufdas Ergebnis zurück. Oder hab ich die Frage einfach nicht verstanden?
Wie lautet denn die Formel?
Gruß
m-o-m
wieso brauchst Du denn ´ne VBA-Lösung? Du hast doch dein Ergebnis. Greif doch einfach aufdas Ergebnis zurück. Oder hab ich die Frage einfach nicht verstanden?
Wie lautet denn die Formel?
Gruß
m-o-m
Antwort 2 von waddehaddedudeda
Hallo nochmal,
Nun ja es geht hierbei um einen dynamischen Algorithmus der verschiedene Sachen berechnet, und da komm ich um vba leider nicht herum.
Prizipiell siehts so aus:
Porgramm "berechnet" oder besseer kommt zu dem Ergebniss das des gewünschte Ergebniss 2 ist.
Das bedeutet der Preis Nummer 2 (zweithöchster) erfüllt meine Bedingungen (verschiedenen Kriterien), die anderen also die niedrigeren sind für mich nicht interessant weil sie die Kriterien eben nicht erfüllen.
Also soll mein Programm eben ab sofort auch nur noch mit Preis 1 und Preis 2 weiterrechnen, um hier Rechenzeit zu sparen, und nicht immer alle Preise (die halt das eine oder anderen nicht erfüllen) mit rumschleppen zu müssen.
Und eben nur mit diesen beiden dann sozusagen Variable A2 und Variablen A(<2) sollen dann eben noch verwendet werden.
Bei Ergebniss 2 ists einfach, dann kann ich einfach per Hand die nächsten Schritte zweimal programmieren, aber ich hätte eben gerne etwas das dann eben bei Ergebniss 50 die 50 Preise berücksichtigt, und dann eben mit allen 50 eine Operation ausführt ... und da wirds dann per hand mit if ergbeniss = 1 then or if Ergbeniss = 2 etwas mühsam ...
Hoffe du konntest mir noch folgen, bei diesem zugegeben wirren Gedankengang ;)
Nun ja es geht hierbei um einen dynamischen Algorithmus der verschiedene Sachen berechnet, und da komm ich um vba leider nicht herum.
Prizipiell siehts so aus:
Porgramm "berechnet" oder besseer kommt zu dem Ergebniss das des gewünschte Ergebniss 2 ist.
Das bedeutet der Preis Nummer 2 (zweithöchster) erfüllt meine Bedingungen (verschiedenen Kriterien), die anderen also die niedrigeren sind für mich nicht interessant weil sie die Kriterien eben nicht erfüllen.
Also soll mein Programm eben ab sofort auch nur noch mit Preis 1 und Preis 2 weiterrechnen, um hier Rechenzeit zu sparen, und nicht immer alle Preise (die halt das eine oder anderen nicht erfüllen) mit rumschleppen zu müssen.
Und eben nur mit diesen beiden dann sozusagen Variable A2 und Variablen A(<2) sollen dann eben noch verwendet werden.
Bei Ergebniss 2 ists einfach, dann kann ich einfach per Hand die nächsten Schritte zweimal programmieren, aber ich hätte eben gerne etwas das dann eben bei Ergebniss 50 die 50 Preise berücksichtigt, und dann eben mit allen 50 eine Operation ausführt ... und da wirds dann per hand mit if ergbeniss = 1 then or if Ergbeniss = 2 etwas mühsam ...
Hoffe du konntest mir noch folgen, bei diesem zugegeben wirren Gedankengang ;)
Antwort 3 von m-o-m
moin,
irgendwie hab ich heute ein Verständnisproblem. oder zu wenig Kaffee intus.
Ich versuch mal zusammenzufassen:
Du rechnest irdwas aus (50 Ergebnisse), brauchst aber nur die beiden größten (oder kleinsten). Richtig?
Wie wär´s dann mit =KGRÖSSTE() oder aber eben =KKLEINSTE().
Da kann man ja auch die ersten, zweiten u.s.w. definieren.
Oder bin ich jetzt auf dem Holzweg???
Gruß
m-o-m
irgendwie hab ich heute ein Verständnisproblem. oder zu wenig Kaffee intus.
Ich versuch mal zusammenzufassen:
Du rechnest irdwas aus (50 Ergebnisse), brauchst aber nur die beiden größten (oder kleinsten). Richtig?
Wie wär´s dann mit =KGRÖSSTE() oder aber eben =KKLEINSTE().
Da kann man ja auch die ersten, zweiten u.s.w. definieren.
Oder bin ich jetzt auf dem Holzweg???
Gruß
m-o-m
Antwort 4 von Primut
Hi,
versuchs doch mal mit einem Array!
Gruß Primut
versuchs doch mal mit einem Array!
Dim Preis(50) As Long
Dim i As Integer
REM Zuordnung der 50 Preise in das Array
Preis(0) = 10
Preis(1) = 20
...
i=Ergebnis
Rem weitere Berechnung mit dem durch Ergebnis ausgewählten Preis
x=Preis(i)
...
Gruß Primut
Antwort 5 von nighty
hi all :)
hier ein beispiel mit spielraum fuer experimente :)
gruss nighty
Option Explicit
Sub MehrFachAbfrage()
Rem deklarierung anpassen
Dim ZahlIndex(3) As Long
Dim VarIndex(3) As Long
Dim Index As Long
Dim zaehler As Integer
Rem 4 ergebnisse die anhand des index nach varindex verzweigen
ZahlIndex(0) = 1
ZahlIndex(1) = 2
ZahlIndex(2) = 3
ZahlIndex(3) = 4
VarIndex(0) = 5
VarIndex(1) = 6
VarIndex(2) = 7
VarIndex(3) = 8
Rem index zuweisung alternativ range("").value bzw wertezuweisung range("").value2
Index = 4
Rem schleifendurchlauf des index,bei treffer wird hier der index zahlindex mit varindex multipliziert
Do While zaehler < 4
If Index = ZahlIndex(zaehler) Then Range("A1") = ZahlIndex(zaehler) * VarIndex(zaehler)
zaehler = zaehler + 1
Loop
End Sub
hier ein beispiel mit spielraum fuer experimente :)
gruss nighty
Option Explicit
Sub MehrFachAbfrage()
Rem deklarierung anpassen
Dim ZahlIndex(3) As Long
Dim VarIndex(3) As Long
Dim Index As Long
Dim zaehler As Integer
Rem 4 ergebnisse die anhand des index nach varindex verzweigen
ZahlIndex(0) = 1
ZahlIndex(1) = 2
ZahlIndex(2) = 3
ZahlIndex(3) = 4
VarIndex(0) = 5
VarIndex(1) = 6
VarIndex(2) = 7
VarIndex(3) = 8
Rem index zuweisung alternativ range("").value bzw wertezuweisung range("").value2
Index = 4
Rem schleifendurchlauf des index,bei treffer wird hier der index zahlindex mit varindex multipliziert
Do While zaehler < 4
If Index = ZahlIndex(zaehler) Then Range("A1") = ZahlIndex(zaehler) * VarIndex(zaehler)
zaehler = zaehler + 1
Loop
End Sub
Antwort 6 von nighty
hi all :)
fuer noch noch mehr bezuege wuerde sich eine 2 oder hoehrere dimensionen herrvorragend fuer eignen,allerdings wird es ab der 4 dimension recht lustig :)))
im oberen beispiel haette mir ein 2 dimensioniales feld auch besser gefallen,doch da ich nicht wusste ob zeichen oder zahl hab ich sie erstmal getrennt gehalten zum beseren anpassen
gruss nighty
fuer noch noch mehr bezuege wuerde sich eine 2 oder hoehrere dimensionen herrvorragend fuer eignen,allerdings wird es ab der 4 dimension recht lustig :)))
im oberen beispiel haette mir ein 2 dimensioniales feld auch besser gefallen,doch da ich nicht wusste ob zeichen oder zahl hab ich sie erstmal getrennt gehalten zum beseren anpassen
gruss nighty
Antwort 7 von nighty
hi all :)
hier noch als function :)
gruss nighty
schreibweise nachden die function in einem allgemeinen modul eingefuegt ist
=DeineFunktion(A1;A6:A9;C8:C11)
die beiden bereiche der multiplikation muessen gleich gross sein,erste parameter das auszuloesende ergebnis bzw zelle
Function DeineFunktion(Zellen As Range, zellen1 As Range, zellen2 As Range) As Double
Application.Volatile
Dim zaehler As Long
ReDim zelle3(0) As Long
For Each zelle1 In zellen2
ReDim Preserve zelle3(zaehler)
zelle3(zaehler) = zelle1.Value
zaehler = zaehler + 1
Next zelle1
zaehler = 0
For Each zelle In zellen1
If zelle.Value = Zellen.Value Then DeineFunktion = zelle3(zaehler) * zelle.Value
zaehler = zaehler + 1
Next
End Function
hier noch als function :)
gruss nighty
schreibweise nachden die function in einem allgemeinen modul eingefuegt ist
=DeineFunktion(A1;A6:A9;C8:C11)
die beiden bereiche der multiplikation muessen gleich gross sein,erste parameter das auszuloesende ergebnis bzw zelle
Function DeineFunktion(Zellen As Range, zellen1 As Range, zellen2 As Range) As Double
Application.Volatile
Dim zaehler As Long
ReDim zelle3(0) As Long
For Each zelle1 In zellen2
ReDim Preserve zelle3(zaehler)
zelle3(zaehler) = zelle1.Value
zaehler = zaehler + 1
Next zelle1
zaehler = 0
For Each zelle In zellen1
If zelle.Value = Zellen.Value Then DeineFunktion = zelle3(zaehler) * zelle.Value
zaehler = zaehler + 1
Next
End Function
Antwort 8 von nighty
hi all :)
statt in dieser zeile den wert zuzuweisen liesse sich auch ueber den selben index einer stringvar (die namen neuer functionen) bzw berechnungen durchfueren :)
If zelle.Value = Zellen.Value Then DeineNeuenFunktion
gruss nighty
statt in dieser zeile den wert zuzuweisen liesse sich auch ueber den selben index einer stringvar (die namen neuer functionen) bzw berechnungen durchfueren :)
If zelle.Value = Zellen.Value Then DeineNeuenFunktion
gruss nighty
Antwort 9 von waddehaddedudeda
uf, input overflow ;)
ich les mich ma durch, probiers aus, und meld mich montag ;)
Aber jetzt is erstma wochenende, und ich will euch und mich heut nimmer weiter quälen ...
Danke vielmals Jungs, und ich bin sicher das was ich such is da irgendwo dabei ;)
ich les mich ma durch, probiers aus, und meld mich montag ;)
Aber jetzt is erstma wochenende, und ich will euch und mich heut nimmer weiter quälen ...
Danke vielmals Jungs, und ich bin sicher das was ich such is da irgendwo dabei ;)
Antwort 10 von waddehaddedudeda
Also sorry, aber ich habs einfach nicht begriffen.
Aaaaber ich hab mir anderweitg geholfen, und muss das Problem nicht mehr lösen. Danke an alle die so zahlreich hier geholfen haben, ich bin mir sicher fähigere Menschen als mich hätte das zum richtigen Ziel gebracht ;)
Grüße und danke nochmal!
Aaaaber ich hab mir anderweitg geholfen, und muss das Problem nicht mehr lösen. Danke an alle die so zahlreich hier geholfen haben, ich bin mir sicher fähigere Menschen als mich hätte das zum richtigen Ziel gebracht ;)
Grüße und danke nochmal!

