0

私の最初の質問は、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
4

2 に答える 2

1

私の最初の質問は、ExcelVBAが2つの制約を持つifステートメントを認識するかどうかです。

の。コース。

ところで、「Excel VBA」はなく、VBAだけがあります。そしてそれは事実上VBと同等です。

多分それは私の論理の問題です。

おそらく。ただし、コードですぐに問題が発生することはありません。

于 2011-09-22T16:14:27.917 に答える
1

間違っていなければ、if条件の後半は決して真ではありませんか?これにより、「Range("$F$71").Value」が「currentValueAdd」よりも小さくなることはありません。

これが事実である場合、私はあなたの論理を再検討する必要があります

    currentValueAdd = Range("$F$71").Value

これは常に Range("$F$71") の値を currentValueAdd に送信し、条件をチェックしているとき

    Range("$F$71").Value < currentValueAdd

セル F71 の値は、変数に転送してから変更されていないため、変数の値は F71 の値と同じであるため、2 番目の条件が真になることはありません。

お役に立てば幸いです。

于 2011-09-22T17:58:13.213 に答える