忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBAスタンダード対策】Do ... Loop While(後判定)の条件とループ構造を攻略!

お尻に条件を書く「後判定」のもう一つの形が Do ... Loop While です。「条件を満たしている間は繰り返す」というWhileの性質を持ちながら、お尻で判定するため「最低1回は実行される」という、VBAループ構文の中で最も見極めが必要な構造を持っています。

1. 問題:後判定(Loop While)における実行結果

【 問題 】 下記のコードを実行して PostWhileTest プロシージャを呼び出した際、メッセージボックスに表示される数値はいくつでしょうか?

Sub PostWhileTest()
    Dim n As Integer
    n = 5

    Do
        n = n + 5
    Loop While n < 5

    MsgBox n
End Sub

① 5(条件が最初から満たされていないため、1回も実行されない)
② 10(条件は満たしていないが、必ず1回は実行される)
③ 15
④ 判定が無限に繰り返されてフリーズ(無限ループ)する

2. 正解:後判定Whileループの処理フローに関する正解

正解: ② 10

3. 解説:「While(~の間)」が最後にある構造の罠

While は「条件が正しい(True)間は続ける」という構造ですが、それがお尻(Loopの後ろ)にあることで、実行タイミングに独特な変化が生まれます。

[ Loop While の実行フロー構造 ]

条件式:n < 5 (nが5未満の間はループを続ける!)

・スタート時:n = 5
ループ突入:後判定なので、最初の条件チェックはスルー!
  まず n = 5 + 5 = 10 を実行します。
お尻で判定:ここで初めて Loop While n < 5 の判定を行います。
  現在の n は 10 なので、10 < 5不成立(False!)になります。

While は「Trueの間だけ続ける」構造なので、Falseになった瞬間にループは終了(脱出)します。結果として、最初の1回だけが実行され、最終値は 10 になります。

ここが試験に出る!: スタンダード試験では、前判定の Do While なら実行回数が0回になるようなデータを用意し、あえて後判定の Do ... Loop While にすることで「最初の1回が実行されて値が変わる」というミスを誘ってきます。「While=Trueの間」「Loopの後ろ=最低1回実行」の2つの構造を掛け合わせて、落ち着いてトレースしましょう。


4. まとめ

「Loop Whileは、まずやってみてから、続けるかどうかを判断する」。この後判定構造を理解すれば、すべてのDoループ(Whileの前・後、Untilの前・後)の仕分けは完璧です。データの初期状態に左右されない、正確な繰り返し処理をコントロールしましょう。



PR

【VBAスタンダード対策】Do ... Loop Until(後判定)の罠とループ構造を攻略!

Do Until を記述する場所には、実は2つのパターンがあります。頭につける「前判定」と、お尻につける「後判定」です。条件式が全く同じでも、記述する場所によってループの実行回数が変わるという、VBAの構造的な仕組みを解き明かします。

1. 問題:後判定(Loop Until)における実行結果

【 問題 】 下記のコードを実行して PostTest プロシージャを呼び出した際、メッセージボックスに表示される数値はいくつでしょうか?

Sub PostTest()
    Dim n As Integer
    n = 10

    Do
        n = n + 5
    Loop Until n >= 10

    MsgBox n
End Sub

① 10(条件が最初から満たされているため、1回も実行されない)
② 15(条件を満たしているが、必ず1回は実行される)
③ 20
④ 判定が無限に繰り返されてフリーズ(無限ループ)する

2. 正解:後判定ループの処理フローに関する正解

正解: ② 15

3. 解説:「まず動く」後判定と「まず確認する」前判定

Until(~になるまで)の位置が Do の後ろか、Loop の後ろかによって、プログラムの初期動作が変わる構造になっています。

[ 前判定と後判定の構造的な違い ]

■ 前判定(Do Until ── Loop)
ループに入る「前」に条件をチェックします。もし最初から n = 10 で、条件が n >= 10 だった場合、「あ、もうゴールしてるから入らない」となり、実行回数は 0回 になります。

■ 後判定(Do ── Loop Until) ※今回の問題
条件チェックが最後(Loopの後ろ)にあります。そのため、たとえ最初から条件(n >= 10)を満たしていても、上から流れてきた処理は必ず最初に1回実行されてしまいます。

・スタート時:n = 10
ループ突入:条件を見ずに、まず n = 10 + 5 = 15 を実行!
お尻で判定15 >= 10成立(True!) ⇒ 終了して脱出!

★ 結果として、必ず1回は処理が通るため、最終値は 15 になります。

ここが試験に出る!: スタンダード試験では、この「後判定(Do ... Loop Until)」を使ったコードを見せて、条件が最初から満たされているデータの場合に『1回実行されるか、0回か』を迷わせる問題が頻出します。「後判定は最低1回は絶対に通る構造」だと覚えておきましょう。


4. まとめ

「前判定は石橋を叩いて渡る(0回の可能性あり)、後判定は行動してから考える(最低1回は実行)」。この構造の使い分けができるようになると、実務でも『まず1行目のデータを処理してから、次の行があるか判定する』といった柔軟なスクリプトが組めるようになります。


【VBAスタンダード対策】Do While ・・・ Loop ループの正しい構文と制御構造!

指定した条件が満たされている間、処理を何度も繰り返す Do While ループ。For文とは異なり、「あらかじめ回数が決まっていない処理」に最適な構文ですが、正しいキーワードの組み合わせと、無限ループを防ぐための構造を理解する必要があります。

1. 問題:Do While ループの文法と実行結果

【 問題 】 下記のコードを実行して LoopTest プロシージャを呼び出した際、メッセージボックスに表示される数値はいくつでしょうか?

Sub LoopTest()
    Dim n As Integer
    n = 1

    Do While n < 5
        n = n + 2
    Loop

    MsgBox n
End Sub

① 3
② 5
③ 7
④ 構文エラー(コンパイルエラー)が発生する

2. 正解:Do While ループの処理フローに関する正解

正解: ② 5

3. 解説:「条件を満たしている間だけ」回る構造

Do While ループを正確に読み解くには、構文の正しいペアと、変数が変化するタイミング(タイムライン)を構造的に追う必要があります。

[ 構文ルールと実行フローの構造 ]

1. ペアは必ず「Do While」と「Loop」
VBAにおいて、Do While で始めたループは、必ず Loop キーワードで閉じます。EndEnd Do、あるいは単に Wend(※古い型)を使うとエラーになります。

2. 処理のトレース(追跡)
・スタート時:n = 1
1回目判定:1 < 5 は成立(True)⇒ 内部へ進む ⇒ n = 1 + 2 = 3
2回目判定:3 < 5 は成立(True)⇒ 内部へ進む ⇒ n = 3 + 2 = 5
3回目判定:5 < 5 は不成立(False!) ⇒ ループを抜ける

★ 結果として、ループを脱出した直後の n の値は 5 になっています。

ここが試験に出る!: スタンダード試験では、「Do Whileの条件式がいつ評価されるか」や「ループを抜けた瞬間の変数の正確な値」がよく問われます。また、内部でカウンタ変数(n = n + 2 など)を更新し忘れると、条件がずっと成立したままになり、マクロがフリーズする「無限ループ」を引き起こす構造上のリスクについても意識しておきましょう。


4. まとめ

「Do While の終わりは Loop。条件が崩れた瞬間に外へ」。この基本フローを脳内にインストールしておけば、セルを上から順番にチェックして「空欄になるまで続ける」といった実務で最もよく使うデータスキャン処理を安全かつ正確に実装できるようになります。



【VBAスタンダード対策】Select Caseによる「文字列パターンマッチング」を攻略!

Select Case は数値だけでなく、文字列の分岐にも威力を発揮します。特に「〇〇で始まる」といった、ワイルドカードを使った柔軟なパターンマッチングを行う際の、VBA特有の構文構造をマスターしましょう。

1. 問題:ワイルドカードを使った文字列判定の文法

【 問題 】 変数 buf に格納された文字列が「Excel」で始まるかどうかを判定し、メッセージボックスを表示したい。空欄 ( A ) に入る正しい記述はどれでしょうか?

Sub StringTest()
    Dim buf As String
    buf = "Excel_VBA_Standard"

    Select Case True
        Case ( A )
            MsgBox "Excel関連のデータです"
        Case Else
            MsgBox "その他のデータです"
    End Select
End Sub

① buf = "Excel*"
② buf Like "Excel*"
③ Is Like "Excel*"
④ "Excel*"

2. 正解:文字列パターン判定に関する正解

正解: ② buf Like "Excel*"

3. 解説:「Select Case True」という特殊な構文構造

`Select Case` で文字列の「部分一致」や「パターン判定」を行う場合、通常の数値判定とは異なる特殊な構造(テクニック)が使われます。

[ 文字列パターン判定の構造ルール ]

1. 通常の書き方(Case "Excel*")は使えない
もし Select Case buf と書き、Case "Excel*" と指定した場合、VBAは「Excel*」という文字そのものと完全に一致するか(完全一致)を判定してしまいます。ワイルドカードとして機能しません。

2. 「Select Case True」の構造マジック
部分一致を行いたいときは、最初の行を Select Case True(条件が正しいものを探す)にします。そして、Caseの後ろに buf Like "Excel*" という、判定結果が True か False になる条件式を直接記述します。

3. ワイルドカードのルール
*(アスタリスク):0文字以上の任意の文字列(Excel* で「Excelで始まる」)
?(クエスチョン):任意の1文字
#(シャープ):任意の数字1文字(0〜9)

ここが試験に出る!: スタンダード試験では、Select Case True の構文パターンや、ワイルドカード * ? # の意味の違いが正確に理解できているかが問われます。特に不等号の時は Case Is > 10 のように Is を使いましたが、Like演算子の時は Is を使わず「変数名 Like ...」と書く構造の明確な違いを整理しておきましょう。


4. まとめ

「あいまい検索は Select Case True と Like のコンビで通す」。この特殊な構文構造をマスターすれば、ファイル名のルールチェックや、特定のキーワードが含まれるデータの仕分けなど、実務でよくある文字列処理を美しくコントロールできるようになります。

【VBAスタンダード対策】Select Caseによる「複数値のカンマ指定」を攻略!

Select Case では、連続した範囲(To)だけでなく、「1または5」「2または6」のように、離れた複数の値を指定することも可能です。その際の正しい記述文法と判定の仕組みを押さえましょう。

1. 問題:カンマ区切りによる複数値の判定

【 問題 】 下記のコードを実行して CheckGroup(5) を呼び出した際、メッセージボックスに表示される文字列として正しいものはどれでしょうか?

Sub Test()
    Call CheckGroup(5)
End Sub

Sub CheckGroup(num As Integer)
    Select Case num
        Case 1, 5
            MsgBox "グループA"
        Case 2, 6
            MsgBox "グループB"
        Case Else
            MsgBox "その他"
    End Select
End Sub

① 「その他」が表示される
② 「グループA」が表示される
③ 「グループB」が表示される
④ 構文エラー(コンパイルエラー)が発生する

2. 正解:複数値指定の判定に関する正解

正解: ② 「グループA」が表示される

3. 解説:カンマは「または(Or)」の構造を持つ

特定の値を複数ピックアップして条件分岐させたい場合、VBAでは非常にシンプルな記述構造が用意されています。

[ 複数値指定の構造ルール ]

1. カンマは「Or」の意味になる
Case 1, 5 と書くと、内部的には「対象の変数が 1 または 5 の場合」という Or 条件の構造になります。今回引数に渡されたのは「5」なので、見事に条件に合致し、グループAが実行されます。

2. 「To」との違いを意識する
もし Case 1 To 5 と書いた場合は「1, 2, 3, 4, 5」のすべてが対象になりますが、Case 1, 5 であれば「1」と「5」のピンポイントな2つの値だけが対象になります。

3. 「To」と「カンマ」の組み合わせも可能
応用として、Case 1 To 3, 5(1〜3、または5)のように、範囲指定と個別指定をカンマで繋ぐ高度な構造もVBAでは認められています。

ここが試験に出る!: スタンダード試験では、If文の If num = 1 Or num = 5 Then という長くなりがちなコードを、Select Case を使ってスッキリ書き直す問題が出題されます。カンマの前後で条件が「いずれかに一致(Or)」の構造になっているかを冷静に見極めましょう。


4. まとめ

「離れた値はカンマで繋ぐ。それはOrのメッセージ」。このシンプルな文法構造をマスターすれば、不規則に並ぶ特定データの仕分け処理も迷わずスマートに記述できます。If文のOr連打から卒業し、見やすいコードを心がけましょう。