2 つの入力ボックスに入力された値をチェックする次のコードがあります。両方の値が 0 の場合、MsgBox
"Stop!" と表示されます。(これは後でサブを終了するように変更しますが、テストには MsgBox を使用しています)
テストの結果、次の結果が得られました。
両方の文字列にゼロを指定すると、予想されるメッセージ ボックスが生成されます。
最初の文字列にゼロ以外の値があり、その後に 2 番目の文字列にゼロ以外の値が続くと、(予想どおり) 何もしません。
最初の文字列のゼロの後に 10 以上の 2 番目の文字列値が続くと、メッセージ ボックスが表示されます (予期しない)。
また、2 番目の文字列が 6-9 の場合、 と表示されることにも気付きましたx.00000000000001%
。これは浮動小数点の問題であり、関連していると思いますか? この動作は、IF... InStr
関数がなくても発生します。
Option Explicit
Sub Models()
Dim MinPer As String, MaxPer As String, Frmula As String
Dim Data As Worksheet, Results As Worksheet
Set Data = Sheets("Data")
Set Results = Sheets("Results")
Application.ScreenUpdating = False
MinPer = 1 - InputBox("Enter Minimum Threshold Percentage, do not include the % symbol", _
"Minimum?") / 100
MaxPer = 1 + InputBox("Enter Maximum Threshold Percentage, do not include the % symbol", _
"Maximum?") / 100
If (InStr(MinPer, "0") = 0) And (InStr(MaxPer, "0") = 0) Then
MsgBox "STOP!"
End If
' Remainder of code...
これは、これまで VBA で遭遇した中で最も興味深い問題であり、それについての議論を歓迎します。
編集:このコードを使用して、エンドユーザーが表示するパラメーターを画面に表示します。したがって、.00000000001% の問題にどのように気付いたか:
.Range("D2").Value = "Min is " & 100 - MinPer * 100 & "%"
.Range("D3").Value = "Max is " & MaxPer * 100 - 100 & "%"