- 締切済み
偶数、奇数の判定について
こんばんは 以下のマクロにて、最初は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
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
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=が必要なケース。
- okormazd
- ベストアンサー率50% (1224/2412)
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」になることはないので、「偶数」と表示されることはなく、常に「奇数」と表示されるのです。
- edomin7777
- ベストアンサー率40% (711/1750)
Select Case y Case y = 0 MsgBox "偶数" Case y = 1 MsgBox "奇数" End Select は、 Select Case y Case 0 MsgBox "偶数" Case 1 MsgBox "奇数" End Select か?
- misawajp
- ベストアンサー率24% (918/3743)
デバッグで どこかで x を表示させて確認してみたら 質問にあるプログラムリストはマクロで使用されているものと同一でしょうか 奇数は9回表示されますか
- kmee
- ベストアンサー率55% (1857/3366)
> Case y = 0 > Case y = 1 このcaseの使い方が問題です。