Do ~ Loop と For ~ Next について
昨日の空手の順位算出は、現在試行錯誤中。なので、今日は閑話休題で別のお話。
職場のマクロ勉強会で、以下を組み合わせて使う場合を説明する機会があった。
- Do ~ Loop ⇒ 条件が分かっている時
- For ~ Next ⇒ 総数が分かっている時
参考までに紹介すると、こんな感じだ。
- とあるマンションの住人について名簿を作成する。
- このマンションは10階建てで、各階に20部屋ある。
- 各部屋を訪ね、そこに住んでいる全員を記録する。
マンションの階数と部屋数は、総数が分かっている。
従って、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
などを書き漏らしてファイル名を更新し忘れたりすると、途端に無限ループに陥ることになる。これについて、
「インフルエンザの予防接種で、この『次の方どうぞ』を忘れると、一人目の方が永遠に注射を打たれ続けることになる。」
と説明したところ、ちょっとウケた。
ウケたので、この説明を他の方への説明でも使い回しするとしよう。
参考まで。