ID非公開

2022/6/26 22:17

22回答

VBAで for eachとfor nextの使い分けがよく分かりません。 また、Loop untilみたいなやつもよく分かりません。 教えてくれたらありがたいです。

Visual Basic98閲覧

ベストアンサー

0

その他の回答(1件)

1

あるブックに属するシートの名前をリストアップする処理を例にする。 次のコードでは、番号1から始めて、シートの数だけ繰り返す 左端のシートから右に向かって1,2,3という番号で参照できる。 ここでは 変数 i にその番号を入れて繰り返している Dim i As long For i = 1 To Worksheets.Count Debug.print Worksheets(i).Name Next Do Loop も 似たようなもの。For Next で代用可能なことが多い。 Dim count As long Do While count < Worksheets.Count count = count + 1 Debug.Print Worksheets(count).Name Loop 但し、For Next は処理の対象の数が分かっていて、繰り返しの回数の上限を 決めることができる場合に使えるが、何回繰り返せばよいか分かっていない場合は使えない/使いにくい。 例えば、セルの値を足し算して、合計が100を超えたら、繰り返し処理を終わる、という場合は何回繰り返せば良いか予め分かっていないので、Do Loopを使う。 Dim i As Long, sum As long Do While sum <= 100 i = i + 1 sum = sum + Range("A" & i ).Value Loop 例えば「Worksheets」はそのブックに含まれるシートの集合体。 そのような集合体を扱う場合には、For Each が使える。 但し、多くの場合、For Next で代用できる。 次のコードでは、シートを1つずつ取り出して変数ws に入れて使っている シートを変数wsに入れるコードは書かなくてよい。 ただ For each 要素 in 集合体 と書くだけで良い。 ForNext よりややすっきり書ける。あと、処理速度も速い。 (For each) Dim ws As Worksheet For each ws in Worksheets Debug.print ws.Name Next (For Next) Dim i As long For i = 1 To Worksheets.Count Debug.print Worksheets(i).Name Next

1人がナイス!しています