プロが教えるわが家の防犯対策術!

こんばんは

以下のマクロにて、最初はx=1なので「奇数」、次はx=x+1で2になっているので「偶数」と表示されるように作ったつもりなのですが、何故か全部「奇数」の表示になってしまいます。

どこがおかしいのか分からないので、教えて頂きたいです。

Sub macro()
Dim x, y As Integer
x = 1

Do
y = x Mod 2

Select Case y
Case y = 0
MsgBox "偶数"
Case y = 1
MsgBox "奇数"
End Select

x = x + 1
Loop Until x = 10

End Sub

A 回答 (5件)

Select Case y


としたら、Case文のCase の直後ではその取りうる「値だけ」を指定するのだ。
IF分の書き方とは違う。
ーー
解説書のCaseの個所を見てご覧。
改めて y=0 などとしては、エラーにならなくても、質問のように混乱するよ。
ーー
参考 別件だが
Sub test01()
y = Cells(1, "A")
'If y = 0 Or 1 Then 'NO
If y = 0 Or y = 1 Then 'OK
MsgBox "AA"
End If
End Sub
はよく間違うケース。A1セルに、3と入れて、2,3行目のどちらかをコメントアウトを入れ替えてやってみてご覧。
こちらは y=1のy=が必要なケース。
    • good
    • 0

case 0



は、「y=0のとき」

case 1

は、「y=1のとき」
という意味になって、意図した動作をすると思います。

case y=0

は、「y=y=0のとき」、という意味になり、

case y=1

は、「y=y=1のとき」、という意味になって、こういう書き方もあるので、エラーにならないのです。

これらは、論理演算で、「y=y」ならTrue(1)を返し、「y≠y」ならFalse(0)を返すのですが、yとyは常に等しいので、常に「y=y」だから、1を返します。したがって、常に「y=y=1」になり、「y=y=0」になることはないので、「偶数」と表示されることはなく、常に「奇数」と表示されるのです。
    • good
    • 0

Select Case y


Case y = 0
MsgBox "偶数"
Case y = 1
MsgBox "奇数"
End Select

は、

Select Case y
Case 0
MsgBox "偶数"
Case 1
MsgBox "奇数"
End Select

か?
    • good
    • 0

デバッグで どこかで x を表示させて確認してみたら



質問にあるプログラムリストはマクロで使用されているものと同一でしょうか 奇数は9回表示されますか
    • good
    • 0

> Case y = 0


> Case y = 1

このcaseの使い方が問題です。
    • good
    • 0

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