Do ~ Loop と For ~ Next について

昨日の空手の順位算出は、現在試行錯誤中。なので、今日は閑話休題で別のお話。

職場のマクロ勉強会で、以下を組み合わせて使う場合を説明する機会があった。

  • Do ~ Loop ⇒ 条件が分かっている時
  • For ~ Next ⇒ 総数が分かっている時

参考までに紹介すると、こんな感じだ。

  • とあるマンションの住人について名簿を作成する。
  • このマンションは10階建てで、各階に20部屋ある。
  • 各部屋を訪ね、そこに住んでいる全員を記録する。

f:id:Infoment:20181109221150p:plain
マンションの階数と部屋数は、総数が分かっている。
 従って、For ~ Next が適している。

各部屋には、何人住んでいるか分からない。
 従って、Do ~ Loop が適している。

※あくまで「適している」というお話。

Sub 国勢調査()
    Dim 階数 As Long
    Dim 部屋番号 As Long
    Dim i As Long
    
    For 階数 = 1 To 10
        For 部屋番号 = 1 To 20
            調査対象者 = ピンポンして最初に出てきた人
            i = 1
            Do Until 調査対象者 = ""
                名簿(階数, 部屋番号)(i) = 調査対象者
                i = i + 1
                調査対象者 = その部屋に住む次の方
            Loop
        Next
    Next
End Sub

イメージなので、配列の拡張など、細かい点はご容赦。

ちなみに、Do ~ Loop は Dir関数と組み合わせて使うことが多い。この時、ループを抜ける条件を設定してあっても、

FileName = Dir

などを書き漏らしてファイル名を更新し忘れたりすると、途端に無限ループに陥ることになる。これについて、

「インフルエンザの予防接種で、この『次の方どうぞ』を忘れると、一人目の方が永遠に注射を打たれ続けることになる。」

と説明したところ、ちょっとウケた。
ウケたので、この説明を他の方への説明でも使い回しするとしよう。

参考まで。