VBAのループ(繰り返し)処理まとめ

VBA プログラミング
この記事は約4分で読めます。

※当ブログではアフィリエイト広告を利用しています。

VBAとは、MicrosoftのExcelなどのアプリケーションに機能拡張をするためのマクロ言語。

Visual Basicがベースとなっているプログラミング言語で、Excelで手作業で行っていたものを自動で行いたい場合など、結構活躍してくれる。

今回は、よく使うVBAのループ(繰り返し)処理をまとめてみた。

ループする回数が決まっている場合(For ~ Next)

10回ループさせる例。

10セル分の値を加算し、合計を算出している。

Dim i As Integer
Dim sum As Integer

sum = 0

For i = 1 To 10
    sum = sum + Cells(i, 1)
Next i

MsgBox sum

増減値2で10回ループさせる例。

1つ飛ばしで、10セル分の値を加算し、合計を算出している。

Dim i As Integer
Dim sum As Integer

sum = 0

For i = 1 To 10 Step 2
    sum = sum + Cells(i, 1)
Next i

MsgBox sum

オブジェクトをループさせる場合(For Each In ~ Next)

ワークブックオブジェクトのワークシートをループさせる例。

ワークブックの全てのワークシート名を連結させ、表示している。

Dim wkBook As Workbook
Dim wkSheet As Worksheet
Dim sheetName As String

sheetName = ""

Set wkBook = Application.ThisWorkbook

For Each wkSheet In wkBook.Sheets
    sheetName = sheetName & wkSheet.Name
Next wkSheet

MsgBox sheetName

条件が満たされる間ループさせる場合(Do While ~ Loop)

セルの値が入っている場合に加算していく例。

セルの値が入っているものを加算し、合計を算出している。

Dim i As Integer
Dim sum As Integer

i = 1
sum = 0

Do While Cells(i, 1) <> ""
    sum = sum + Cells(i, 1)
    i = i + 1
Loop

MsgBox sum

条件が満たされるまでループさせる場合(Do Until ~ Loop)

セルの値が「EOF(End Of File:ファイルの終端)」の行まで加算していく例。

「EOF」までのセルの値を加算し、合計を算出している。

Dim i As Integer
Dim sum As Integer

i = 1
sum = 0

Do Until Cells(i, 1) = "EOF"
    sum = sum + Cells(i, 1)
    i = i + 1
Loop

MsgBox sum

ループを抜ける場合

ある条件になった時にループ処理を抜けたい場合は、「Exit」文を使用し、以下のようにする。

「For ~ Next」の場合

ループカウンタが5になった場合にループを抜ける例。

「Exit For」でループ処理を抜ける。

Dim i As Integer
Dim sum As Integer

sum = 0

For i = 1 To 10
    If i = 5 Then
        Exit For
    End If
    
    sum = sum + Cells(i, 1)
Next i

MsgBox sum

「Do ~ Loop」の場合

ループカウンタが5になった場合にループを抜ける例。

「Exit Do」でループ処理を抜ける。

Dim i As Integer
Dim sum As Integer

i = 1
sum = 0

Do While Cells(i, 1) <> ""
    If i = 5 Then
        Exit Do
    End If

    sum = sum + Cells(i, 1)
    i = i + 1
Loop

MsgBox sum

ちなみに、サブプロシージャを抜ける「Exit Sub」、ファンクションプロシージャを抜ける「Exit Function」もよく使用します。

以上。

参考サイト

Excel(エクセル)VBA入門:繰り返し処理(For~Next,Do~Loop)

コメント

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