Hey Alexander,
besten Dank für die Info. Schade, dann werde ich wohl die Formel vorher selber umstellen müssen. Trotzdem Danke für die Mühe.
Viele Grüße
Marcel
Hey Alexander,
besten Dank für die Info. Schade, dann werde ich wohl die Formel vorher selber umstellen müssen. Trotzdem Danke für die Mühe.
Viele Grüße
Marcel
Hallo Rainer,
ich bin echt bergeistert, dass du dir die Zeit genommen hast, mir nähere Vorgehensweisen zu beschreiben. Besten Dank dafür.
Ich habe mich mal an den Debugger versucht, es funktioniert genaus so, wie du es beschreiben hast. Recht praktisch das Teil Nun habe ich mal versucht an manchen Stellen den Code zu verändern, um zu sehen was passiert. Einigermaßen habe ich das Prinzip verstanden. Ich habe auch versucht den Code zu erweitern, bin aber daran gesheitert und habe deshalb aufgeben müssen. Ich glaube, es ist mir eine (oder zwei) Nummern zu groß und so ganz ohne Hilfe schaffe ich es doch nicht
Wenn du mir vielleicht noch etwas zusammen basteln könntest, natürlich nur wenn du Zeit und Lust hast, wäre ich die unendlich dankbar.
Noch nen schönen Tag und viele Grüße
Marcel
Hallo Marcel,
ich bin echt bergeistert, dass du dir die Zeit genommen hast,
mir nähere Vorgehensweisen zu beschreiben. Besten Dank dafür.Ich habe mich mal an den Debugger versucht, es funktioniert
genaus so, wie du es beschreiben hast. Recht praktisch das
TeilNun habe ich mal versucht an manchen Stellen den Code
zu verändern, um zu sehen was passiert. Einigermaßen habe ich
das Prinzip verstanden. Ich habe auch versucht den Code zu
erweitern, bin aber daran gesheitert und habe deshalb aufgeben
müssen. Ich glaube, es ist mir eine (oder zwei) Nummern zu
groß und so ganz ohne Hilfe schaffe ich es doch nichtWenn du mir vielleicht noch etwas zusammen basteln könntest,
natürlich nur wenn du Zeit und Lust hast, wäre ich die
unendlich dankbar.
Das kann ich Dir noch nicht versprechen, ab hier wird es richtig Arbeit. Es ist sehr viel zu beachten, die Möglichkeiten, dabei Fehler zu machen sind gewaltig. So nebenbei kann ich das nicht. Dazu brauche ich Zeit und Ruhe, um mich ausreichend zu konzentrieren.
Deshalb möchte ich auch erst noch klären, ob der Weg so überhaupt nötig ist. Egal, wie weit ich gehe, die Funktion wird mit dem, was ich leisten kann, nie universell einsetzbar sein. Sofern im relevanten Bereich nur die vier Grundrechenarten und keine Klammern auftauchen, werde ich das noch hin bekommen. Klammern auflösen sprengt dann schon den Rahmen.
Deshalb muss ich mal fragen, was dann mit der umgestelten Formel passiert. Ist die schon das Endergebnis, oder werden da Werte eingesetzt und die Zielvariable berechnet? Wenn damit gerechnet werden soll, ist das umsändliche Umstellen der Formel nämlich gar nicht nötig, dann kann man das Problem auch anders angehen und hat keine Einschränkungen.
Mit Eval kann man so etwas: 'c = Sqr(a^2+b^2)
ausrechnen lassen, wenn man Zahlen einsetzen darf und bei gegebenem c und a das b per Iteration ermitteln ohne die Formel umzustellen. Wenn das bei Dir geht, wählen wir lieber diesen Weg, denn der ist universell einetzbar.
Gruß Rainer
Hallo Rainer,
auf das Umstellen kann ich notfalls verzichten. Aber wenn das Berechnen mit der Eval-Funktion viel einfacher geht, wäre das echt Klasse. Die umgestellte Formel hätte zum Schluss eh noch ausgerechnet werden müssen. Da lassen wir den Schritt des Umstellens einfach weg.
Dein bisherigen Code werde ich vielleicht trotzdem verwenden, zur Verdeutlichung Damit deine Mühe nicht ganz umsonst war.
Wenn du noch ein kleines Beispiel für die Eval-Funktion hast, man, dass wäre echt Spitze.
Vielen Dank für deine große Hilfe.
Viele Grüße
Marcel
Hallo Marcel,
auf das Umstellen kann ich notfalls verzichten. Aber wenn das
Berechnen mit der Eval-Funktion viel einfacher geht, wäre das
echt Klasse. Die umgestellte Formel hätte zum Schluss eh noch
ausgerechnet werden müssen. Da lassen wir den Schritt des
Umstellens einfach weg.
na super! Dann wird es leicht und funktioniert auch universell.
Dein bisherigen Code werde ich vielleicht trotzdem verwenden,
zur VerdeutlichungDamit deine Mühe nicht ganz umsonst war.
Wenn du noch ein kleines Beispiel für die Eval-Funktion hast,
man, dass wäre echt Spitze.
Ja, die Funktion werde ich nachher schnell schreiben. Das ist deutlich einfacher, als die Formel umzustellen.
Du kannst ja schon mal den verweis auf das ‚Microsoft Script Contzrol 1.0‘ setzen. Das wird dafür benötigt.
Bis später, Rainer
Hallo Rainer,
super, besten Dank schonmal. Das mit dem Script Control, keine Ahnung wie das geht, aber ich werde es schon irgendwie hinbekommen
Viele Grüße
Marcel
Hallo Marcel,
hier in der Firma hebe ich ein Excel und konnte mal probieren. Mit VBA kenne ich mich einfach nicht aus, in Excel habe ich es nicht hin bekommen.
In VB6 läuft das Tool.
Um etwas zum Testen zu haben, steht einiges an Code ringsherum, das Werte erzeugt, die später für die Variablen eingesetzt werden. An die Funktion ‚Iteration‘ muss ein String übergeben werden, in dem vorn der Y-Wert steht, dann ein Gleichheitszeichen und dann der Rest der Formel.
Die Zielvariable muss an dieser Stelle immer ‚X‘ heißen. Der String kann also etwa so aussehen:
25.4 = 3*X^2 + 4*X + 9
Dafür gibt die Funktion ‚Iteration‘ den ermittelten Wert für X zurück.
Das Programm ist getestet und läuft. Wie ich die Werte für die Variablen eingesetzt habe, siehst Du auch im Code. Ich hänge hier einfach den gesamten Code meines VB6-Programms rein, die relevante Funktion ‚Iteration‘ siehst Du schon, der rest ist für Dich nur in so weit von Interesse, daß Du sehen kannst, wie ich den Ztring, der übergeben wird, erzeugt habe.
Die Funktion ‚Iteration‘ kannst Du so übernehmen, wie sie ist. Du musst nur ein Steuerelement 'SvriptControl funktionstüchtig in Dein Projekt bringen, keine Ahnung, wie das in Excel geht, und dieses Steuerelement ‚Script‘ nennen. Dann arbeitet die Funktion.
Gruß Rainer
Option Explicit
Dim mk As String
Private Sub Command1_Click()
Dim i As Integer, Formel As String, V As String, n As Integer
Formel = UCase(Text1.Text)
For i = 1 To Len(Formel)
V = Mid(Formel, i, 1)
If Asc(V) > 64 And Asc(V) Round(Ziel, 9)
Test = Replace(Formel, „X“, CStr(x))
Test = Replace(Test, „,“, „.“)
On Error Resume Next
Erg = Script.Eval(Test)
If flag = False Then
mk = Erg
x = x + (SW * RI)
flag = True
Else
DoEvents
If Abs(Ziel - Erg) > Abs(Ziel - mk) Then
RI = RI * -1
SW = SW / 2
x = x + (2 * SW * RI)
mk = Erg
Else
x = x + (SW * RI)
mk = Erg
End If
End If
Loop
Iteration = Round(x, 5)
End Function
Private Sub Form_Load()
Me.Show
Text1_Validate (False)
End Sub
Private Sub Text1_Validate(Cancel As Boolean)
Dim i As Integer, Formel As String, V As String, n As Integer
Formel = UCase(Text1.Text)
For i = 1 To Len(Formel)
V = Mid(Formel, i, 1)
If Asc(V) > 64 And Asc(V) „X“ Then
Text2(n).Text = n + 2
Else
Text2(n).Text = „X“
End If
'******************************
Text2(n).Visible = True
Label1(n).Visible = True
n = n + 1
End If
End If
Next
End Sub
Hallo Rainer,
bestn Dank für deine Hilfe und den Code, dass ist echt wahnsinnig nett.
Die Komplimierung in Excel geht schon fast Habe ich es richtig verstanden, das ich wirklich nur die Funktion „Iteration“ benötige? Wenn ich da ein ActiveX Steuerelement mit den Namen „Script“ zuweise, kommt irgendein Fehler, Argument ist nicht Optional, keine Ahnung was das heißt. Die Zellbezüge müssten bereits funktionieren, die Funktion kann aber leider noch nicht richtig ausgeführt werden. Ich werde weiter der Sache auf den Grund gehen, vielleicht klappts ja noch
Viele Grüße
Marcel
Hallo Marcel,
habe zuspät deine Aufgabe gelesen.
Schreibe hier ein Antwort für diejenigen die es gebrauchen können.
Man soll eine Makro aufzeichnen und dort ein Funktion in VBA schreiben. Man kann ein Button in der Excel Tabelle erstelle der dann beim klick diese Makro ausführt.
Grüße Basic N.
Code:
Sub BerechneZell()
Dim v1 As String
Dim v2 As String
If Sheets(„Tabelle1“).Range(„A1“).Value „?“ And Sheets(„Tabelle1“).Range(„A1“).Value „“ Then
If v1 = „“ Then
v1 = Sheets(„Tabelle1“).Range(„A1“).Value
Else
v2 = Sheets(„Tabelle1“).Range(„A1“).Value
End If
End If
If Sheets(„Tabelle1“).Range(„A2“).Value „?“ And Sheets(„Tabelle1“).Range(„A2“).Value „“ Then
If v1 = „“ Then
v1 = Sheets(„Tabelle1“).Range(„A2“).Value
Else
v2 = Sheets(„Tabelle1“).Range(„A2“).Value
End If
End If
If Sheets(„Tabelle1“).Range(„A3“).Value „?“ And Sheets(„Tabelle1“).Range(„A3“).Value „“ Then
If v1 = „“ Then
v1 = Sheets(„Tabelle1“).Range(„A3“).Value
Else
v2 = Sheets(„Tabelle1“).Range(„A3“).Value
End If
End If
If Sheets(„Tabelle1“).Range(„A1“).Value = „?“ Then
Sheets(„Tabelle1“).Range(„A1“).Value = Int(v1) + Int(v2)
End If
If Sheets(„Tabelle1“).Range(„A2“).Value = „?“ Then
Sheets(„Tabelle1“).Range(„A2“).Value = Int(v1) + Int(v2)
End If
If Sheets(„Tabelle1“).Range(„A3“).Value = „?“ Then
Sheets(„Tabelle1“).Range(„A3“).Value = Int(v1) + Int(v2)
End If
End Sub