ExcelVBA For Eachによる繰り返し

「Excel VBAでグループや配列の各要素に対して処理を加えたい」というときにFor Each使うことができます。

すでに作成したグループや配列を後になって変更したりするときにも、For Eachを使えば簡単に処理ができます。

そこで今回は、Excel VBAのFor Eachの使い方にについて解説します。

こんなあなたにおすすめ
  • For Eachの使い方が知りたい
  • グループや配列の各要素に処理を加えたい

For Each 基礎

For Each とは?

配列やコレクションなどのグループに対して、繰り返し処理を加えたいときにFor Eachを使います。

例えば、「グラフ(オブジェクト)を作成した後、すべてのグラフに処理を加えたい」となったときに、For Eachで簡単にすべてのグラフに対して処理を加えることができます。

繰り返し処理には、for文、while文がありますが、配列やコレクションなどのグループに対して処理を加えたい場合は、For Eachを使うことをおすすめします。

繰り返し処理の使い分け

繰り返し処理の使い分け
  • for
     →幅広く使える。
      範囲(1~ある値)で繰り返し処理を加えたい
  • while
     →ある状態(条件式がTrue)が続く限り処理を実行し、
      ある状態が解除(条件式がFalse)されたら、処理を終了したい
  • For Each
     →配列やコレクションなどのグループに対して処理を加えたい

for文、while文は以下の記事をご参照ください。

xeory_basexeory_base
ExcelVBA Do Whileによる繰り返し

For Each 使い方

基本的な使い方

For Eachの基本的な使い方は以下の通りです。

コード

Dim 変数 As Variant
For Each 変数 In グループ
    処理
Next 変数

配列を操作

実際に配列を操作するコードを見ていきましょう。

コード

Sub test()

    Dim arr() As Variant        '配列の変数
    arr = Array("a", "b", "c")  '配列
    
    Dim tmp As Variant  'For Each 変数
    Dim str As String   '各要素を代入する変数
    
    For Each tmp In arr
        str = str & tmp & vbCrLf
    Next tmp
    
    MsgBox str
    
End Sub

●実行結果

セル範囲

実際に指定したセル範囲にセル位置を入力するコードを見ていきましょう。

コード

Sub test()

    Dim r As Range          '変数を定義
    Set r = Range("A1:C3")  'セル範囲を変数に格納
    
    Dim tmp As Range        '変数を定義
 
    For Each tmp In r
        tmp.Value = tmp.Address 'セル位置をセルに入力
    Next tmp
    
End Sub

●実行結果

Selection 選択範囲

実際に選択した範囲にセル位置を入力するコードを見ていきましょう。

コード

Sub test()

    Dim tmp As Range      '変数を定義
 
    For Each tmp In Selection
        tmp.Value = tmp.Address 'セル位置をセルに入力
    Next tmp

End Sub

●実行結果

コレクションを操作

実際にWorkshettsコレクションを使って、ブック内のすべてのシート名を取得するコードを見ていきましょう。

コード

Sub test()

    Dim tmp As String
    Dim ws As Worksheet
 
    For Each ws In Worksheets
        tmp = tmp & ws.Name & vbCrLf
    Next ws

    MsgBox tmp

End Sub

●実行結果

For Each 入れ子

For Eachの中にFor Eachを入れることを入れ子と言います。

今回は入れ子を使って、すべてのシートのすべての図形のテキストを取得するコードを見ていきましょう。

コード

Sub test()

    Dim tmp As String
    Dim ws As Worksheet
    
    Dim shp As Shape
 
    For Each ws In Worksheets   'ブック内のすべてのシート
        tmp = tmp & "・" & ws.Name & vbCrLf & "  "  'シート名を変数に追加
        For Each shp In Worksheets(ws.Name).Shapes  'シート内のすべての図形
            tmp = tmp & shp.TextFrame.Characters.Text & ", "    '図形のテキストを変数に追加
        Next shp
        tmp = tmp & vbCrLf  '改行を変数に追加
    Next ws

    MsgBox tmp  'メッセージボックスを出力

End Sub

●Excelの状態

シートは以下のように「Sheet1」、「Sheet2」、「Sheet3」があります。

図形は以下のように「図形1」、「図形2」、「図形3」があります。

●実行結果

まとめ

ここまで、Excel VBAのFor Eachの使い方について解説しました。

繰り返し処理は、膨大な時間を削減してくれるので、この機会にぜひお試しください。

繰り返し処理の使い分け
  • for
     →幅広く使える。
      範囲(1~ある値)で繰り返し処理を加えたい
  • while
     →ある状態(条件式がTrue)が続く限り処理を実行し、
      ある状態が解除(条件式がFalse)されたら、処理を終了したい
  • For Each
     →配列やコレクションなどのグループに対して処理を加えたい

for文、while文は以下の記事をご参照ください。

xeory_basexeory_base
ExcelVBA Do Whileによる繰り返し

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です