.net column
.NET開発者のためのブログメディア

VBAでのfor Eachを詳細解説|繰り返し処理をコード例でおさらい

2021年01月26日

SE
For Eachの使い方が知りたいです。

PM
For Eachで繰り返し処理ができます。それでは見ていきましょう。

VBAのFor Eachの使い方とは?


今回は、VBAのFor Eachの使い方について説明します。For Eachで繰り返し処理が実現できます。
ここでは、
・配列のループ
・逆順ループ
・break
・continue
・Range
・Selection
・Worksheets
について紹介します。

 

VBAのFor Eachの使い方に興味のある方はぜひご覧ください。

配列のループ

VBAでの配列のループ方法を紹介します。実際のソースコードを見てみましょう。

‘ 配列のForループ’
For Each Item In myArray
‘ イミディエイトウィンドウに出力’
Debug.Print (Item)
Next Item
End Sub

実行結果は以下のようになります。Debug.Printの結果はイミディエイトウィンドウに出力されます。イミディエイトウィンドウが表示されていない場合は、「表示(V)」→「イミディエイトウィンドウ(I)」を選択してください。

配列のすべての要素が表示されていることが分かります。このように、For Eachで繰り返し処理ができます。

逆順ループ

VBAでの配列の逆順ループ方法を紹介します。For Eachでは逆順ループは実現できないので、代わりにFor~Nextを使用します。実際のソースコードを見てみましょう。

‘ ループインデックス’
Dim i As Integer
‘ 配列の逆順Forループ’
For i = UBound(myArray) To LBound(myArray) Step -1
‘ イミディエイトウィンドウに出力’
Debug.Print (myArray(i))
Next i
End Sub

実行結果は以下のようになります。

「Step -1」の部分が、ループインデックスiをデクリメントする指定です。
初期値である「UBound(myArray)」から最終値である「LBound(myArray)」とすることで、インデックスの大きいほうから逆順に処理が行われます。

 

このように、逆順に繰り返し処理をすることもできます。

break

VBAでのループ処理を抜ける方法を紹介します。プログラミング言語でよくある「break」に相当します。VBAではbreakはないので、その代わりに「Exit For」を使用します。実際のソースコードを見てみましょう。

‘ 配列のForループ’
For Each Item In myArray
If Item = 3 Then
‘ 要素が3の場合、ループを抜ける’
Exit For
End If
‘ イミディエイトウィンドウに出力’
Debug.Print (Item)
Next Item
End Sub

実行結果は以下のようになります。

「Exit For」でループ処理を抜けることが分かります。

 

「Exit Sub」とすることで、関数を抜けます。実際のソースコードを見てみましょう。

‘ 配列のForループ’
For Each item In myArray
If item = 3 Then
‘ 要素が3の場合、関数Subを抜ける’
Exit Sub
End If
‘ イミディエイトウィンドウに出力’
Debug.Print (item)
Next item
End Sub

実行結果は以下のようになります。

 

このように、Exit Forでループ処理を抜け、Exit Subで関数を抜けることが分かります。

continue

VBAでのループをスキップする方法を紹介します。continueに相当します。VBAでは、GoToを使用します。実際のソースコードを見てみましょう。

‘ 配列のForループ’
For Each Item In myArray
If Item = 3 Then
‘ 要素が3の場合、Continue:の行に移動’
GoTo Continue
End If
‘ イミディエイトウィンドウに出力’
Debug.Print (Item)
‘ GoTo Continueでここにくる’
Continue:
Next Item
End Sub

実行結果は以下のようになります。

このように、GoToを使えばcontinue相当の処理を実現することができます。
ループの外に「Continue:」を記述すれば、break相当になります。実際のソースコードを見てみましょう。

‘ 配列のForループ’
For Each item In myArray
If item = 3 Then
‘ 要素が3の場合、Break:の行に移動’
GoTo Break
End If
‘ イミディエイトウィンドウに出力’
Debug.Print (item)
Next item
‘ GoTo Breakでここにくる’
Break:
End Sub

実行結果は以下のようになります。

GoToでもbreakは実現できますが、可読性が低くなるのでExit Forのほうが良いでしょう。

Range

VBAでのRangeのループ方法を紹介します。実際のソースコードを見てみましょう。

‘ RangeのForループ’
For Each item In Range(“A1:C3”)
‘ イミディエイトウィンドウに出力’
Debug.Print (item.Address)
Next
End Sub

実行結果は以下のようになります。

Range内のアドレスがすべて表示されることが分かります。

Selection

VBAでのSelectionのループ方法を紹介します。実際のソースコードを見てみましょう。

‘ SelectionのForループ’
For Each item In Selection
‘ イミディエイトウィンドウに出力’
Debug.Print (item.Address)
Next item
End Sub

エクセルのセルを選択した状態でマクロを実行してみてください。実行結果は以下のようになります。

選択したセルのアドレスが表示されることが分かります。

Worksheets

VBAでのWorksheetsのループ方法を紹介します。実際のソースコードを見てみましょう。

実行結果は以下のようになります。

エクセルのシートがすべて出力されることが分かります。

SE
このように、VBAでのループの方法は何種類もあるのですね。

PM
実際に自分でコードを書いてFor Eachの使い方をマスターしましょう。

まとめ

いかがでしたでしょうか。
VBAのFor Eachの使い方について説明しました。For Eachで繰り返し処理が実現できます。配列やRange、Selection、Worksheetsに対して、For Eachで繰り返し処理ができます。breakやcontinue相当の処理も実現できます。

 

ぜひご自身でソースコードを書いて、理解を深めてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags

Jobs