- ベストアンサー
マクロについての基本的な情報
- マクロの基本的な情報について質問があります。具体的には、Sub 前判定until()とSub 前判定while()について理解したいと思っています。これらのサブルーチンは、ループを制御するための条件文を使用しています。Sub 前判定until()の例では、iが10より大きくなるまで、iを1ずつ増やし続けています。ループが終了した後に、iの値がメッセージボックスに表示されます。一方、Sub 前判定while()の例では、iが10より大きくなるまで、iを1ずつ増やし続けていますが、条件文が異なるため、ループが実行されずに直接メッセージボックスに1が表示されます。
- 理解が難しい場合は、具体的な例を挙げて説明します。例えば、Sub 前判定until()の場合、iが1から始まり、iが10より大きくなるまで、iを1ずつ増やし続けます。ループの終了条件が満たされた後に、メッセージボックスにカウンタの値が表示されます。また、Sub 前判定while()の場合、iが1から始まり、iが10より大きくなるまで、iを1ずつ増やし続けますが、条件文が異なるため、ループが実行されずに直接メッセージボックスに1が表示されます。
- まとめると、Sub 前判定until()とSub 前判定while()は、ループを制御するための条件文を使用しています。Sub 前判定until()では、指定した条件が満たされるまでループが続き、終了後に結果が表示されます。一方、Sub 前判定while()では、指定した条件が満たされない場合にループが実行されず、直接結果が表示されます。理解が難しい場合は、具体的な例を挙げて説明することをおすすめします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
追伸: ループについて混乱されていると思います ループはこのタイプでは4種類あります 4種類とはUntile とWhileがおのおの2種類という事です これを覚えようとすると混乱します Whileは使わないでもコードの書き方でUntileでまかなえます Untileは条件が一致したらループを抜ける ですから =と<>の使い分けで対応すればいいのです また、最初にその条件が成立していないとループに入りません ループでわからなくなるのは進行過程が見えないところにあります ブレークポイントを設定して1つづつ進んでいけば ループも流れがよくわかります 期待した答えが得られないとき これをやることによって どうやってコードが進んでいくのかが確認できます ブレークポイントは必須だと思ってください 検索すればこの使い方は数多くヒットします
その他の回答 (3)
- layy
- ベストアンサー率23% (292/1222)
回答のブレイクポイント設定とかF8でというのは、プログラミングした処理を1行ずつ追いかけたらわかりますということです。それでは今後もプログラミングできるのか不安は残りそうなので補足します。 コップ使ってバケツに水を入れるとしたとき、「あふれるまでやりなさい」、「水が入る間はやりなさい」の差みたいなものです。前者はあふれる瞬間まで作業あり、後者はあふれる事がない。 例題ではUNTILとWHILEしか違いがありませんからその行に着目します。調べているように「~まで」「~の間」違いで同じような事でも差がありますからこれを理解しないといけません。 2つ同じ10回繰り返しの結果を出そうとしていたなら例題は誤りがあります。そこが混乱を招いていると思います。WHILEでi≦10にしてみて下さい。それで前判定か後判定かがよりわかりやすいかと思います。
- keithin
- ベストアンサー率66% (5278/7941)
1についての勉強をするための作成例: Sub 前判定until() i = 1 msgbox "これからループに入ろうと思います" Do Until i > 10 i = i + 1 msgbox "カウンタは " & i & "です" Loop msgbox "ループを抜けました" MsgBox ("カウンタは" & i & "になりました") End Sub を実行してみます。 2についての習作: Sub 前判定while() i = 1 msgbox "今からループに入ろうと思います" Do While i > 10 i = i + 1 msgbox i Loop msgbox "ループを脱出しました" MsgBox ("カウンタは" & i & "になりました") End Sub 2についての習作2: Sub 前判定while2() i = 1 msgbox "今からループに入ろうと思います" Do While i < 10 msgbox i i = i + 1 Loop msgbox "ループを脱出しました" MsgBox ("カウンタは" & i & "になりました") End Sub 実際にはこういった迂遠な作業はせずにマクロのコード上でF8キーを連打し,黄色い色で実行されるマクロの一行一行の動きをトレースして,どこで意図と違う動作をしているか問題点をあぶり出します。 併せてVBE画面でローカルウィンドウを表示させて各変数の値をウォッチしたり,debug.printを利用します。 またDoの文字の上でF1キーを押してヘルプを表示させ,使用例などに出ている正しいマクロ(いやヘルプに出ている使用例が全部正しい訳ではないのが問題なのですが)を参考にしてみると,do whileの使い方もそのままそこに書いてあります。
- sumer45
- ベストアンサー率17% (52/294)
1について コードの流れを見てください MsgBoxがループの中にあれば iが加算されるごとに 数値を増したMsgBoxが表示されるのですが このコードではループが終了したあとにMsgBoxがあるので 11になります 2について 最初から条件に適合していないので ループの中には入りませんので それをスルーしてMsgBoxが表示されますので1になるのです ブレークポイントを設定して進みを見ると良くわかります