VBA For Eachの例(クイックリファレンス)
In this Article
このチュートリアルでは、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
この記事のサンプルは、AutoMacroの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
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