アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://www.relief.jp/itnote/archives/vba-if-or.php


このページにも書かれてあるのですが、

Sub textss()
aaa = 2


If aaa = 0 Or 1 Then

bbb = 1

ElseIf aaa = 2 Then



bbb = 2

End If

ccc = bbb


End Sub


を実行すると
cccには2が代入されそうなのですが、実際には1が代入されてしまいます。

If aaa = 0 Or aaa = 1 Then
と入力する必要があります。

それでは、
If aaa = 0 Or 1 Then

とした時、プログラムではどういう処理がなされているのでしょうか?

A 回答 (2件)

>If aaa = 0 Or 1 Then



orの両端の評価をします。

ifとは、thenまでの値により分岐する文です。
値はブール型として真(True)と偽(False)により分岐しますが、実はブール型は

http://msdn.microsoft.com/ja-jp/library/wts33hb3 …

0 は偽(False)、それ以外は真(True)と書くこともできます。

>aaa = 0
は比較演算子でFalseを返しますが、
>1
は1を返します。言い換えれば0以外なので真(True)です。
Orの条件の一方を真(True)とするならaaaの値にかかわらず真(True)です。

なのでcccには1が代入されます。
    • good
    • 0

if 式1 or 式2 then



と書けば、見えてくると思いますよ。さすれば、

式1は、 aaa=0 で
式2は、 1

だと言うことが判ります。

式1が成立するのは、 aaa の値が 0 の場合のみ。
式2が成立するのは、常にです。なぜなら、式が1だからです。

イミディエイトウインドウで、1が何を意味するのかを調べて表示している画像を添付しています。そこには、

?CBool(1)
True

つまり、1と書いた式は、常に真であるということです。

以上で、理解してもらえたかな。
「VBAでif文にorを使う場合の仕様」の回答画像2
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!