私の最初の質問は、Excel VBA が 2 つの制約を持つ if ステートメントを認識するかどうかです。
IF Range(somecell).value > 0 AND Range(anothercell).value < 100 Then:
execute code here
実行中のスクリプトで両方の制約が満たされていることがわかっている場合に、if ステートメントで囲まれたコードをトリガーするのに問題があるためです。多分それは私の論理の問題です。
コードを含めました。ロジックまたは VBA のエラーを指摘できるかどうかを確認してください。背景情報 (コードにもいくつか含めました):
セル F71 (D40 と D41) を変更する 2 つのレバーがあります。要件は、F71 が 0 よりも大きく、F71 の現在の値 (変数 currentValueAdd に保存されている) よりも小さくなければならないことです。
したがって、上記の条件を満たす最適な組み合わせを見つけようとして、考えられるすべての組み合わせを繰り返して両方のレイヤーをループします。エクセルを開いて正常に動作することもあれば、まったく動作しないこともあります。結果は非常に不安定です。
Private Sub OptimizeFI_Click()
Dim waiveLoop As Integer
Dim comissionLoop As Integer
Dim finalWaive As Integer
Dim finalCommission As Integer
Dim currentValueAdd As Double
Dim F71 As Range, D41 As Range
currentValueAdd = Range("$F$71").Value ' <-- This is the cell I am trying to optimize.
For waiveLoop = 0 To 7
Range("$D$40").Value = waiveLoop ' <-- one of the levers in changing cell F71
For comissionLoop = 0 To 7
Range("$D$41").Value = comissionLoop ' <-- a second lever in changing cell F71
If Range("$F$71").Value > 0 And Range("$F$71").Value < currentValueAdd Then
finalWaive = Range("$D$40").Value
finalComission = Range("$D$41").Value
Range("$E$27").Value = finalWaive * 0.05
Range("$E$28").Value = finalComission * 0.05
currentValueAdd = Range("$F$71").Value
End If
Next comissionLoop
Next waiveLoop
Range("$D$40").Value = Range("$E$27") / 0.05
Range("$D$41").Value = Range("$E$28") / 0.05
Range("$F$8").Value = currentValueAdd
End Sub