2016-08-18 11 views
1

以下のようなIF条件があります。 ここでEntitySumは1です。条件が満足できるものではありませんが、Ifループに入ります。VBAコード条件が満たされない場合、Stlllがループに入る

Dim RowCount As Integer 
Dim ColCount As Integer 
Dim m, x As Integer 
Dim EntitySum As Double 
RowCount = Worksheets("Contribution").UsedRange.Rows.Count - 4 
ColCount = Worksheets("Entities").UsedRange.Rows.Count - 4 

m = 4 

'outer loop for Rows 
Do 
EntitySum = 0 
x = 6 
m = m + 1 
    'inner loop for Columns 
    Do 
    x = x + 1 
    EntitySum = EntitySum + Worksheets("Contribution").Cells(m, x).Value 
    Loop Until x = ColCount + 6 
    If EntitySum <> 1 Then 
     MsgBox "The Entity Contribution at Row " & m & " is not 100%. Please Fix it to proceed further." 
     Exit Sub 
    End If 
Loop Until m = RowCount + 4 

enter image description here

それはVBAですべての問題ですか?

あなたの回答を感謝します。

おかげで、 リタ

+0

「EntitySum」はどのように定義しましたか? –

+2

これを 'String/Variant'と定義した場合、この' Val(Trim(EntitySum))<> 1 Then'を試してください。 –

+0

はい私はEntitySumを定義しました。 Dim EntitySum Doubleとして – Rita

答えて

1

問題は、あなたのスクリーンショットは、EntitySum = 1の値は、それがないことを示しているにもかかわらずです。ここにあなたの問題を再現する簡単な方法があります

セルA1にこの数字を入力します。0.00000000000000001。あなたは、Excelが自動的に今

Sub Sample() 
    Dim EntitySum As Double 

    EntitySum = 1 + Range("A1") 

    If EntitySum <> 1 Then 
     MsgBox "A" 
    End If 
End Sub 

EntitySumは間違い1に等しいではありませんが、あなたがその変数の上にマウスを置くならば、それは1として表示されます。このコードを試してみてください1E-17

としてそれをフォーマットしていることがわかります。これは浮動小数点の問題です。 Excelはそのような大きな数を処理することができないため、問題が発生します。

あなたのケースでそのような振る舞いをしている理由を理解するには、セルWorksheets("Contribution").Cells(m, x).Valueをチェックして、どのような値があるかを確認する必要があります。

enter image description here

関連する問題