VBA For Eachの例(クイックリファレンス)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 7月 11, 2022

このチュートリアルでは、VBAでFor Eachループを使用する例について説明します。一般的なループについてはこちらをご覧ください。

For Each ループ

For Each ループを使用すると、コレクション内のそれぞれの(each)オブジェクトループで処理することができます。

  • 範囲内のすべてのセル
  • ワークブック内のすべてのワークシート
  • 開いているすべてのワークブック
  • ワークシート内のすべての図形
  • 配列内のすべての項目
  • などなど

For Each : 基本的な例

以下の例では、For Eachループを設定して、さまざまな種類のオブジェクトをループ処理する方法を説明します。

セルをループ処理

このプロシージャは、範囲A1:A10の各セルをループして、その右側のセルを自分自身と等しく設定します。

Sub ForEachCell()
    Dim Cell As Range
    
    For Each Cell In Sheets("Sheet1").Range("A1:A10")
        Cell.Offset(0, 1).value = Cell.value
    Next Cell
    
End Sub

シートをループ処理

このプロシージャは、ワークブックの各シートをループして、各シートの非表示を解除します。

Sub ForEachSheets()
    Dim ws As Worksheet

    For Each ws In Sheets
        ws.Visible = True
    Next ws

End Sub

ワークブックをループ処理

このプロシージャは、各ワークブックをループして、それぞれを閉じます。

Sub ForEachWorkbooks()
    Dim wb As Workbook
    
    For Each wb In Workbooks
        wb.Close
    Next wb
    
End Sub

図形をループ処理

Sheet1の各シェイプをループして削除するプロシージャです。

Sub ForEachShape()
    Dim Shp As Shape
    
    For Each Shp In Sheets("Sheet1").Shapes
        Shp.Delete
    Next Shp
    
End Sub

グラフをループ処理

Sheet1のChartをループして削除します。

Sub ForEachCharts()
    Dim cht As ChartObject
    
    For Each cht In Sheets("Sheet1").ChartObjects
        cht.Delete
    Next cht
    
End Sub

ピボットテーブルのループ処理

Sheet1の各ピボットテーブルをループしてクリアするプロシージャです。

Sub ForEachPivotTables()
    Dim pvt As PivotTable
    
    For Each pvt In Sheets("Sheet1").PivotTables
        pvt.ClearTable
    Next pvt
    
End Sub

テーブルのループ処理

Sheet1の各Tableをループし、それぞれを削除します。

Sub ForEachTables()
    Dim tbl As ListObject
    
    For Each tbl In Sheets("Sheet1").ListObjects
        tbl.Delete
    Next tbl
    
End Sub

配列の項目をループする

配列の各項目をループし、各項目の値をmsgboxに表示します。

Sub ForEachItemInArray()
    Dim arrValue As Variant
    Dim Item As Variant
    arrValue = Array("項目1", "項目2", "項目3")
    
    For Each Item In arrValue
        MsgBox Item
    Next Item
    
End Sub

数値のループ処理

このプロシージャは、配列内の各数値をループし、各数値をmsgboxに表示します。

Sub ForEachNumberInNumbers()
    Dim arrNumber(1 To 3) As Integer
    Dim num As Variant
    
    arrNumber(1) = 10
    arrNumber(2) = 20
    arrNumber(3) = 30
    
    For Each num In arrNumber
        Msgbox num
    Next num
    
End Sub

For Each : AutoMacro Loop Builder

この記事のサンプルは、AutoMacroVBAアドインLoop Builderを使用して作成されています。

vba loop builder

Loop Builderを使用すると、オブジェクトをループするコードを非常に簡単に生成することができます。 AutoMacroには、他にも多くのコードジェネレータ、豊富なコードライブラリ、そして強力なコーディングツールが含まれています。

For Each – If

ループの中でIfステートメントを使用すると、オブジェクトが特定の条件を満たしているかどうかをテストし、条件を満たしたオブジェクトに対してのみアクションを実行することができます。 以下は、範囲内の各セルをループで処理する例です。

範囲内の各セルの場合 – If

Sub If_Loop()
Dim Cell as Range
 
  For Each Cell In Range("A2:A6")
    If Cell.Value > 0 Then
      Cell.Offset(0, 1).Value = "Positive"
    ElseIf Cell.Value < 0 Then
      Cell.Offset(0, 1).Value = "Negative"
    Else
      Cell.Offset(0, 1).Value = "Zero" 
    End If
  Next Cell
 
End Sub

vba for each cell in range

For Eachのよくある例

すべてのワークブックを閉じる

開いているすべてのワークブックを、変更を保存して閉じます。

Sub CloseAllWorkbooks()
    
    Dim wb As Workbook
    
    For Each wb In Workbooks
        wb.Close SaveChanges:=True
    Nex twb
    
End Sub

すべてのシートを非表示にする

このプロシージャは、すべてのワークシートを非表示にします。

Sub HideAllSheets()
    Dim ws As Worksheet

    For Each ws In Sheets
        ws.Visible = xlSheetHidden
    Next ws
    
End Sub

すべてのシートの非表示を解除する

このプロシージャは、すべてのワークシートの非表示を解除します。

Sub UnhideAllSheets()
    Dim ws As Worksheet

    For Each ws In Sheets
        ws.Visible = xlSheetVisible
    Next ws
    
End Sub

すべてのシートを保護する

このプロシージャは、すべてのワークシートを保護します。

Sub ProtectAllSheets()
    Dim ws As Worksheet

    For Each ws In Sheets
        ws.Protect Password:="..."
    Next ws
    
End Sub

すべてのシートの保護を解除する

このプロシージャは、すべてのワークシートの保護を解除します。

Sub UnprotectAllSheets()
    Dim ws As Worksheet

    For Each ws In Sheets
        ws.Unprotect Password:="..."
    Next ws
    
End Sub

すべてのワークシートの図形を削除する

このプロシージャは、ワークブック内のすべての図形を削除します。

Sub DeleteAllShapesOnAllWorksheets()
    Dim Sheet As Worksheet
    Dim Shp As Shape
    

    For Each ws In Sheets
        For Each Shp In ws.Shapes
            Shp.Delete
        Next Shp
    Next ws
    
End Sub

すべてのピボットテーブルを更新する

シート上のすべてのピボットテーブルを更新します。

Sub RefreshAllPivotTables()
    Dim pvt As PivotTable
    
    For Each pvt In Sheets("Sheet1").PivotTables
        pvt.RefreshTable
    Next pvt
    
End Sub

Access VBAでFor Eachを使用する

For Eachループは、Access VBAでもExcel VBAと同じように動作します。 次の例では、現在のデータベース内のすべてのテーブルを削除します。

Sub RemoveAllTables()
  Dim tdf As TableDef
  Dim dbs As Database
  Set dbs = CurrentDb
  For Each tdf In dbs.TableDefs
      DoCmd.DeleteObject tdf.Name
  Loop
  Set  dbs = Nothing
End Sub
vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples