例文を使って繰り返し業務を時短

【マクロ・VBA】ループ(繰り返し)処理の構文一覧 

エクセル、マクロ、VBAでループ(繰り返し)処理の構文を一覧にしてご紹介 VBA

繰り返し処理を行うには、主に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

コメント

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