繰り返し処理を行うには、主にForループ、Do Whileループ、Do Untilループを使用します。以下にそれぞれの方法を説明します。
For~Next構文
Forループは、指定された回数だけコードを繰り返し実行する方法です。
*A列に最終行まで行番号を記入
Sub ループ1()
Dim i As Long
Dim max_row As Long
max_row = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To max_row
Cells(i, 1) = i
Next i
MsgBox "完了"
End Sub
Do ~ Loop構文
Do Whileループは、指定した条件が真である限り、コードを繰り返し実行する方法です。
*セルが空欄になるまでループ
Sub ループ2()
Dim i As Long
On Error GoTo myError
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 1) = Cells(i, 1) + 1
i = i + 1
myError:
MsgBox "完了"
End Sub
Do Until ~Loop構文
Do Untilループは、指定した条件が偽である限り、コードを繰り返し実行する方法です。
*〇〇になるまで繰り返し
Sub ループ3()
Dim i As Long
On Error GoTo myError
i = 1
Do Until Cells(i, 1) = ""
Cells(i, 1) = Cells(i, 1) + 1
i = i + 1
myError:
MsgBox "完了"
End Sub
For Each~Next構文
For Each~Next構文は、コレクションオブジェクト内の各要素に対して順番に処理を行うために使用されます。コレクションは、配列、リスト、辞書などの複数の要素を含むオブジェクトであり、For Each~Next構文を使用することで、コレクション内の各要素を順番に取り出して処理することができます。
For Each~Next構文は、特定の範囲内の要素を繰り返し処理するために使用するForループとは異なり、コレクション内のすべての要素を繰り返し処理するために使用されます。また、For Each~Next構文を使用すると、コレクション内の要素数を事前に知る必要がなく、柔軟なプログラミングが可能になります。
*オブジェクトの集まりを処理するときに使用
(For~NextやDo~Loopは数値をもとに判定する場合が多い)
⇒セルの値が数値でないと処理はできない
Sub 指定範囲をループ処理()
Dim c As Range
Dim my_array As Variant
Dim s_row, s_col As Long
Dim max_row, max_col As Long
s_row = 2
s_col = 1
max_row = ThisWorkbook.ActiveSheet.Cells(Rows.Count, s_col).End(xlUp).Row
max_col = ThisWorkbook.ActiveSheet.Cells(s_row, Columns.Count).End(xlToLeft).Column
'セル範囲を配列に格納
Set my_array = ThisWorkbook.ActiveSheet.Range(Cells(s_row, s_col), Cells(max_row, max_col))
On Error GoTo myError
For Each c In my_array
c.Value = c.Value + 1
Next c
myError:
MsgBox "完了"
End Sub
コメント