マクロについての基本的な情報

このQ&Aのポイント
  • マクロの基本的な情報について質問があります。具体的には、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()では、指定した条件が満たされない場合にループが実行されず、直接結果が表示されます。理解が難しい場合は、具体的な例を挙げて説明することをおすすめします。
回答を見る
  • ベストアンサー

マクロの基本的なことについて質問です。

マクロの基本的なことについて質問です。 1、Sub 前判定until() i = 1 Do Until i > 10 i = i + 1 Loop MsgBox ("カウンタは" & i & "になりました") End Sub メッセージは11になります。 2、Sub 前判定while() i = 1 Do While i > 10 i = i + 1 Loop MsgBox ("カウンタは" & i & "になりました") End Sub メッセージは1になります。 1、はiが10より大きくなるまでというのが条件で、それまでi=i+1を続けるということではないんでしょうか。つまり、最初はi=1なので、メッセージは「2」になるのではと思うのですが… 2、も同様にわかりません。難しくて頭が混乱しています。どなたか分かりやすい例などを沿えて回答を頂けると有り難いです。どうかよろしくお願いします。

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

  • ベストアンサー
  • sumer45
  • ベストアンサー率17% (52/294)
回答No.2

追伸: ループについて混乱されていると思います ループはこのタイプでは4種類あります 4種類とはUntile とWhileがおのおの2種類という事です これを覚えようとすると混乱します Whileは使わないでもコードの書き方でUntileでまかなえます Untileは条件が一致したらループを抜ける ですから =と<>の使い分けで対応すればいいのです また、最初にその条件が成立していないとループに入りません ループでわからなくなるのは進行過程が見えないところにあります ブレークポイントを設定して1つづつ進んでいけば ループも流れがよくわかります 期待した答えが得られないとき これをやることによって どうやってコードが進んでいくのかが確認できます ブレークポイントは必須だと思ってください 検索すればこの使い方は数多くヒットします

その他の回答 (3)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

回答のブレイクポイント設定とかF8でというのは、プログラミングした処理を1行ずつ追いかけたらわかりますということです。それでは今後もプログラミングできるのか不安は残りそうなので補足します。 コップ使ってバケツに水を入れるとしたとき、「あふれるまでやりなさい」、「水が入る間はやりなさい」の差みたいなものです。前者はあふれる瞬間まで作業あり、後者はあふれる事がない。 例題ではUNTILとWHILEしか違いがありませんからその行に着目します。調べているように「~まで」「~の間」違いで同じような事でも差がありますからこれを理解しないといけません。 2つ同じ10回繰り返しの結果を出そうとしていたなら例題は誤りがあります。そこが混乱を招いていると思います。WHILEでi≦10にしてみて下さい。それで前判定か後判定かがよりわかりやすいかと思います。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

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)
回答No.1

1について  コードの流れを見てください  MsgBoxがループの中にあれば iが加算されるごとに  数値を増したMsgBoxが表示されるのですが  このコードではループが終了したあとにMsgBoxがあるので  11になります 2について 最初から条件に適合していないので  ループの中には入りませんので  それをスルーしてMsgBoxが表示されますので1になるのです ブレークポイントを設定して進みを見ると良くわかります

関連するQ&A

  • Do~Loopステートメント

    Do~Loopステートメントで使わな方が良いステートメントとは? Do~Loopステートメントで「古いから使わない方がよい」、と言われたことがあるのですが どれの事だか忘れてしまいました。 Sub test() セルのA1~A10に1~10を入力する i = 1 Do While i < 11 Worksheets("Sheet1").Cells(i, 1).Value = i i = i + 1 Loop End Sub これは一般的だから使ってもよいと思います。 Sub test() セルのA1~A10に1~10を入力する i = 1 Do Until i = 11 Worksheets("Sheet1").Cells(i, 1).Value = i i = i + 1 Loop End Sub これもよく見かけます。 Do While,Do Until以外にもloopステートメントってありますか? あと使わない方が良いステートメント、私の勘違いでなければ教えてください。

  • VBA 九九 Do While

    VBAのDo Whileステートメントを使って九九の表をつくりたいのですが、何度やっても途中で詰まり、実行に至りません。 For NextとDo untilではできたと思うのですがDo Whileがどうしてもわからなくて… どなたか助けてください。お願いします。 Sub 九九計算_for() Dim i, j As Integer For i = 1 To 9 For j = 1 To 9 Cells(i, j).Value = i * j Next Next End Sub Sub 九九計算_do_until() j = 1 Do i = 1 Do Cells(j, i).Value = i * j i = i + 1 Loop Until i = 10 j = j + 1 Loop Until j = 10 End Sub

  • ACCESS VBAが分からない!この問題ですが

    ACCESS VBAの勉強をはじめました。 下のプロシージャを実行するとメッセージボックスに「2018/08/30」と出るようですが、なんでそうなるのかが分からないんです。 ちなみに Loop は繰り返しでWhileは~間という意味は分かるのですが。。。 よろしくお願いいたします。 Sub Lesson() Dim ret As Date, i As Long ret = #8/29/2018# Do ret = ret + 1 i = i + 1 Loop While i > 3 MsgBox ret End Sub

  • 表示されるまで待たせたい

    vbaでieの操作をしているのですが Sub マクロ1() Do While ObjIE.Busy = True DoEvents Loop End Sub でも Sub マクロ2() Const READYSTATE_COMPLETE As Long = 4 Do Until ObjIE.ReadyState = READYSTATE_COMPLETE Loop End Sub でも、 表示される前に次のコードへ進んでしまって エラーになってしまいます。 表示されるまで待たせるには Application.Wait (Now + TimeValue("00:00:03")) を付け足すしかないのでしょうか? (できればこれは使いたくないです) ご教授よろしくお願い致します。

  • マクロのプログラミングで Do Loopステートメントです

    明後日学校の情報の授業でエクセルのマクロを使ってプログラミングするんですが語句について教えてください エクセルのマクロなんですが Do Loopスタートメントって言うのをやります そこでコマンドの意味を教えてほしいんです 明後日なんでなるべく早くお願いします 今回のコマンド(と、バリエーション)って書いてあります 1) dim i as→ 2) Do While 条件式 処理 Loop 3) Do Until 条件式 処理 Loop 4) i=i+1 5)Integer この5つです お願いしますm(_ _)m

  • 複数のファイルをまたぐエクセルマクロの書き方

    開いている複数のエクセルブック(.csv)に対して同じ処理を行いたいのですが、いいマクロが分からなくて困っています。ご存じの方がいらっしゃったら、教えてください。 ちなみに、ファイル名は、1 A、1 B、2 A、2 B・・・と言った感じです。 Sub i = 1 Do While i < 9 Windows("i A.csv").Activate ・・・ Loop End Sub とやってみたのですが、ファイルが選択されずに、止まってしまいました。

  • excelマクロについて

    お世話になります。 下記のように間引きしたいのですが、 0.10.20.30,40,50.60→0.100.200 何故か80からスタートしてしまいます。 0.10.20.30,40,50.60→80.180.280 宜しくお願いします。 Sub test() Application.ScreenUpdating = False i = 1 '1行目の意味 mydata = Cells(i, 1) 'A列でデータが存在するか判定 Do Until mydata = "" '空白になるまで繰り返し処理 Rows(i).Resize(9).Delete '9行の削除 i = i + 1 mydata = Cells(i, 1) Loop Application.ScreenUpdating = True End Sub

  • マクロの中でマクロを実行中に中止させたい

    マクロの中で別のマクロを実行して、それをループさせてます 中のマクロで問題があったとき外のマクロ自体を停止させるのはどうすればいいのですか? Sub A() Do Application.Run "I" Application.Run "II" Loop End Sub ここから マクロIの途中で何らかの条件が合えば、 マクロAを終了するにはどうすれば良いのですか?

  • エクセルのマクロでループ処理

    エクセルのマクロで、ループを使っています 下の様な感じです。 sub TEST() a: re=re+1 if ○○=○▲ THEN GOTO b: 処理・・・ goto a: b: end sub() ですが、これの書き方はDo WhileやDo Untilを使った方が 早く処理できるのでしょうか? また、書き方等もお教え下されば助かります。

  • ユーザーフォームの入力時のマクロについて

    いつもお世話になります。 Windows7 excell2010 です。 今まさにVBAをやり出してあまりわかっていませんが下記のようにまでになったところです。 ご指導をいただきたいのは、 参照図にあるUserForm1に入力するとき、 「日付」 ime が 半角数値 「顧客名」ime が ひらがな 「売上」 ime が 半角数値 を自動的にする マクロ を記述したいです。 ご指導いたたければ幸いです。 下記のようなマクロが記述されています。 ※UserForm1 コード表示 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※標準モジュール Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub

専門家に質問してみよう