136:マクロ素材 Do Loop

130:マクロ素材

同じ処理を何回も繰り返したい場合、Do Loopを使います。for Nextは、別の回にします。

構文

Do While 条件

命令

Loop

上記内容を、日本語でいうと、「条件の間は、命令をくりかえしなさい」という表現になります。

以下に例を表示します。

Sub 繰り返しDOLoop()
i = 0
Do While i < 10
i = i + 1
Cells(i, 1) = i
Loop
End Sub

上記内容は、まず iを0として、iをひとつづつ増やして、そのiを行数として、A列にiの数字をいれていく。という内容です。

でも、仕事でなかなかきまった回数だけ処理するというシチュエーションは、少ないと思います。

行数がある分だけ繰り返す

通常は、処理する行数はいつも変わります。変わる行数に対応するために抜け出す条件を変化させます。

Sub A列がある限り繰返し()
i = 0
N = 1
Do
 i = i + 1
 N = Cells(i, 1)
 If N = “” Then
  Exit Do
 Else
 End If
 Cells(i, 2) = i
Loop While N <> “”
MsgBox i & “-” & N
End Sub

説明です。iは行数です。Nは、A列に入っているものです。途中にIF文がありますが、A列が空白であれば、DoLoopを抜ける Exit Do でDoLoopを抜けます。B列に行数のiを入れて、Loopで上に戻りますが、ここでも念のため、Nが””空白でなければ、Loopを修了する文を入れておきました。Loopだけでも問題ありません。

最後にMsgBoxを入れておいたのは、Loopが終わったのを確認するために入れておきました。通常であれば、Loopから抜けて実行する命令文を入れてください。また、Cells(i,2)=i のところも、通常であれば、命令文を入れてください。

応用

すこし応用して、途中にメッセージ画面を出して、継続するかしないかを、手動で選べるようにしてみましょう。

Sub 自分で選べるA列がある限り繰返し()
 i = 0
 N = 1
 Do
  i = i + 1
  N = Cells(i, 1)
  If N = "" Then
   Exit Do
  Else
  End If
  結果 = MsgBox("処置を続けますか?", vbYesNo + vbQuestion, "どっち?")
  If 結果 = vbYes Then
  Else
      MsgBox "処理を終わります "
      Exit Do
  End If
  Cells(i, 2) = i
 Loop
  MsgBox i & "-" & N
 End Sub

上記のような形になりますが、手動をループの中に入れるのは、ループの意味がなくなってしまう感じです。まあ、そんなときもあるかもしれないので、参考として記載してみました。

逆に、途中でループを抜けるときに、ループを継続するかどうか聞くほうが、一般的でした。

YouTube

136:マクロ素材 Do Loop

コメント

タイトルとURLをコピーしました