Hallo,
In Excel moet ik numeriek (iteratief) een berekening oplossen. Door in 2 cellen waarden te variëren moet de uitkomst tin 2 andere cellen zo dicht mogelijk 0 naderen. Ikzelf kan geen Macro's schrijven, dus met chatGPT de basis gemaakt. Echter als ik hem de macro wil laten uitbreiden om steeds nauwkeuriger bij het antwoord te komen gaat het mis. (Macro start niet, loopt vast, foutieve toets waarden, komt in een loop)
Wat de Macro moet doen:
Cel AF98 en cel AG98 moeten gevarieerd worden.
Het bereik van cel AF98 loopt van -3,5 tot 2. Het interval is 0,25.
Het bereik van cel AG98 loopt van -3,5 tot 32,5. Het interval is 0,25
De waarde in cel AF98 staat als eerste "vast". Deze begint dus eerst bij -3,5 en dan wordt eerst cel AF98 aangepast totdat deze de waarde 32,5 bereikt. Dan schuift de waarde in cel AF98 0,25 omhoog.
De toets waarden staan in cel U98 en V98. Deze moeten zodicht mogelijk 0 naderen. Omdat de intervallen vrij groot zijn (0,25) is de marge nog 50.
Voor dit deel heeft Chatgpt een werkende macro geschreven. Het antwoord is door de marge van 50 niet nauwkeurig genoeg. Ik post deze macro hieronder.
Nu was mijn idee om de intervallen en de marge eerst groter te houden om het aantal berekeningen te verminderen.
Dus eerst intervallen van 0,5 met een marge van 100 voor cel U98 en een marge van 50 voor cel V98. Zodra hij voldoet aan deze eisen moet hij eerst 1 interval stap "terug gaan" (om te voorkomen dat je voorbij het juiste antwoord gaat).
Dus als hij de eerste keer voldoet aan de eisen in BIJVOORBEELD de situatie AF98 = -2,0 en AG98 = 10,0. Dan begint hij dus eerst weer bij AF98=-2,5 en AG98=9,5.
Vervolgens worden de interval stappen en marge allen gehalveerd. Waarna het proces herhaalt totdat de marge voor cellen U98 en V98 hooguit 1 is.
De onderstaande macro werkt dus met vaste intervallen en marges. Nu moeten deze steeds kleiner worden totdat de marge hooguit 1 is.
Wie o wie weet hoe je de macro op deze manier goed uitbreidt?
Sub FindClosestToZero()
Dim afValue As Double
Dim agValue As Double
Dim uValue As Double
Dim vValue As Double
Dim minDifference As Double
Dim currentDifference As Double
Dim targetDifference As Double
Dim minAFValue As Double
Dim minAGValue As Double
Dim afRange As Double
Dim agRange As Double
afRange = 5.5 ' Het bereik van AF98 (-3,5 tot 2)
agRange = 36 ' Het bereik van AG98 (-3,5 tot 32,5)
targetDifference = 50 ' Marge ten opzichte van nul
minDifference = targetDifference + 1 ' Initieel de marge + 1
For afValue = -3.5 To 2 Step 0.25
For agValue = -3.5 To agRange Step 0.25
Range("AF98").Value = afValue ' Zet de waarde in AF98
Range("AG98").Value = agValue ' Zet de waarde in AG98
uValue = Range("U98").Value ' Haal de waarde van U98 op
vValue = Range("V98").Value ' Haal de waarde van V98 op
currentDifference = Abs(uValue) ' Bepaal het verschil met nul
' Controleer of het huidige verschil kleiner is dan het vorige minimum
If currentDifference < minDifference Then
minDifference = currentDifference ' Bijwerken van het minimum
minAFValue = afValue ' Bijwerken van de waarde in AF98
minAGValue = agValue ' Bijwerken van de waarde in AG98
End If
currentDifference = Abs(vValue) ' Bepaal het verschil met nul
' Controleer of het huidige verschil kleiner is dan het vorige minimum
If currentDifference < minDifference Then
minDifference = currentDifference ' Bijwerken van het minimum
minAFValue = afValue ' Bijwerken van de waarde in AF98
minAGValue = agValue ' Bijwerken van de waarde in AG98
End If
' Controleer of de waarden in U98 en V98 binnen de marge liggen
If Abs(uValue) <= targetDifference And Abs(vValue) <= targetDifference Then
Exit Sub ' Stop de macro
End If
Next agValue
Next afValue
' Plaats de gevonden waarden in de cellen
Range("AF98").Value = minAFValue
Range("AG98").Value = minAGValue
End Sub
Groet,
KFS
In Excel moet ik numeriek (iteratief) een berekening oplossen. Door in 2 cellen waarden te variëren moet de uitkomst tin 2 andere cellen zo dicht mogelijk 0 naderen. Ikzelf kan geen Macro's schrijven, dus met chatGPT de basis gemaakt. Echter als ik hem de macro wil laten uitbreiden om steeds nauwkeuriger bij het antwoord te komen gaat het mis. (Macro start niet, loopt vast, foutieve toets waarden, komt in een loop)
Wat de Macro moet doen:
Cel AF98 en cel AG98 moeten gevarieerd worden.
Het bereik van cel AF98 loopt van -3,5 tot 2. Het interval is 0,25.
Het bereik van cel AG98 loopt van -3,5 tot 32,5. Het interval is 0,25
De waarde in cel AF98 staat als eerste "vast". Deze begint dus eerst bij -3,5 en dan wordt eerst cel AF98 aangepast totdat deze de waarde 32,5 bereikt. Dan schuift de waarde in cel AF98 0,25 omhoog.
De toets waarden staan in cel U98 en V98. Deze moeten zodicht mogelijk 0 naderen. Omdat de intervallen vrij groot zijn (0,25) is de marge nog 50.
Voor dit deel heeft Chatgpt een werkende macro geschreven. Het antwoord is door de marge van 50 niet nauwkeurig genoeg. Ik post deze macro hieronder.
Nu was mijn idee om de intervallen en de marge eerst groter te houden om het aantal berekeningen te verminderen.
Dus eerst intervallen van 0,5 met een marge van 100 voor cel U98 en een marge van 50 voor cel V98. Zodra hij voldoet aan deze eisen moet hij eerst 1 interval stap "terug gaan" (om te voorkomen dat je voorbij het juiste antwoord gaat).
Dus als hij de eerste keer voldoet aan de eisen in BIJVOORBEELD de situatie AF98 = -2,0 en AG98 = 10,0. Dan begint hij dus eerst weer bij AF98=-2,5 en AG98=9,5.
Vervolgens worden de interval stappen en marge allen gehalveerd. Waarna het proces herhaalt totdat de marge voor cellen U98 en V98 hooguit 1 is.
De onderstaande macro werkt dus met vaste intervallen en marges. Nu moeten deze steeds kleiner worden totdat de marge hooguit 1 is.
Wie o wie weet hoe je de macro op deze manier goed uitbreidt?
Sub FindClosestToZero()
Dim afValue As Double
Dim agValue As Double
Dim uValue As Double
Dim vValue As Double
Dim minDifference As Double
Dim currentDifference As Double
Dim targetDifference As Double
Dim minAFValue As Double
Dim minAGValue As Double
Dim afRange As Double
Dim agRange As Double
afRange = 5.5 ' Het bereik van AF98 (-3,5 tot 2)
agRange = 36 ' Het bereik van AG98 (-3,5 tot 32,5)
targetDifference = 50 ' Marge ten opzichte van nul
minDifference = targetDifference + 1 ' Initieel de marge + 1
For afValue = -3.5 To 2 Step 0.25
For agValue = -3.5 To agRange Step 0.25
Range("AF98").Value = afValue ' Zet de waarde in AF98
Range("AG98").Value = agValue ' Zet de waarde in AG98
uValue = Range("U98").Value ' Haal de waarde van U98 op
vValue = Range("V98").Value ' Haal de waarde van V98 op
currentDifference = Abs(uValue) ' Bepaal het verschil met nul
' Controleer of het huidige verschil kleiner is dan het vorige minimum
If currentDifference < minDifference Then
minDifference = currentDifference ' Bijwerken van het minimum
minAFValue = afValue ' Bijwerken van de waarde in AF98
minAGValue = agValue ' Bijwerken van de waarde in AG98
End If
currentDifference = Abs(vValue) ' Bepaal het verschil met nul
' Controleer of het huidige verschil kleiner is dan het vorige minimum
If currentDifference < minDifference Then
minDifference = currentDifference ' Bijwerken van het minimum
minAFValue = afValue ' Bijwerken van de waarde in AF98
minAGValue = agValue ' Bijwerken van de waarde in AG98
End If
' Controleer of de waarden in U98 en V98 binnen de marge liggen
If Abs(uValue) <= targetDifference And Abs(vValue) <= targetDifference Then
Exit Sub ' Stop de macro
End If
Next agValue
Next afValue
' Plaats de gevonden waarden in de cellen
Range("AF98").Value = minAFValue
Range("AG98").Value = minAGValue
End Sub
Groet,
KFS