• ベストアンサー

乱数 IFステートメント

Debug.Print Int((11 - 8 + 1) * Rnd + 8) 「これって8~11までの乱数を発生させますよ」 という意味であってますか? そして、 Sub a() Dim 文字数 As Long 文字数 = Int((11 - 8 + 1) * Rnd + 8) If 8 >= 文字数 <= 10 Then MsgBox 文字数 & "は、8~10の間です" End If End Sub を実行すると、11でも MsgBox 文字数 & "は、8~10の間です" が表示されてしまいます。 「8~10の間なら」メッセージボックスを表示するには、 If 8 >= 文字数 <= 10 Then の部分をどうすればいいですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

Int((11 - 8 + 1) * Rnd + 8) ↓ Int(4 * Rnd + 8) ↓ Int(0以上4未満+8) ↓ Int(8以上12未満) ↓ 8以上11以下 なので、『はい』 >If 8 >= 文字数 <= 10 Then >を実行すると、11でも >MsgBox 文字数 & "は、8~10の間です" >が表示されてしまいます。 は、この場合には(VBA以外の言語ではまた変わってきます) このように式が評価されます。 まず、『』で囲った部分 If 8 >= 『文字数 <= 10』 ↓ If 8 >= False ↓ If 『8 >= False』 False の 格納データはBoolean型で 0 です ↓ If 8 >= 0 ↓ 式が成立して、True になります。 文字数が何であっても最初の評価『文字数 <= 10』で返ってくるのは False (0) か True (-1) です なので、常に >MsgBox 文字数 & "は、8~10の間です" >が表示されてしまいます。 になってしまいます。 ですので、 If 8 >= 文字数 <= 10 Then ↓ If 8 >= 文字数 And 文字数<= 10 Then にしませう。

ICVYQICOL
質問者

お礼

if 8 >= 文字数 And 文字数<= 10 Then ですね。 ありがとうございました。勉強になりました。

関連するQ&A