【記事3: For Each…Next ループの活用】《ループ処理について》

【記事3: For Each…Next ループの活用】

はじめに

前回の記事では、For…Next ループについて学びました。今回は、For Each…Next ループを解説し、その活用方法を学んでいきましょう。For Each…Next ループは、オブジェクトのコレクションや配列の要素を効率的に処理するために使用されます。

For Each…Next ループの基本構文

For Each…Next ループの基本構文は以下の通りです。

For Each 要素 In コレクション
    ' 処理
Next 要素

この構文では、コレクションの要素を順番に取り出し、要素に対して繰り返し処理を行います。

For Each…Next ループの実践例

ワークシートの操作

For Each…Next ループを使って、ワークブック内の全てのワークシートの名前を出力する例です。

Sub PrintWorksheetNames()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        Debug.Print ws.Name
    Next ws
End Sub

このコードでは、ThisWorkbook.Worksheetsコレクションの各要素(ワークシート)に対して、ワークシート名をDebug.Printを使って出力しています。

セル範囲の操作

For Each…Next ループを使って、特定のセル範囲内のセルの値を出力する例です。

Sub PrintCellValues()
    Dim rng As Range
    Dim cell As Range

    Set rng = Range("A1:C3")
    For Each cell In rng
        Debug.Print cell.Value
    Next cell
End Sub

このコードでは、セル範囲A1:C3内の各セルに対して、セルの値をDebug.Printを使って出力しています。

オブジェクトコレクションの操作

For Each…Next ループを使って、ワークシート内の全てのシェイプを操作する例です。

Sub HideShapes()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        shp.Visible = msoFalse
    Next shp
End Sub

このコードでは、ActiveSheet.Shapesコレクションの各要素(シェイプ)に対して、VisibleプロパティをmsoFalseに設定し、シェイプを非表示にしています。

For Each…Next と For…Next の使い分け

For Each…Next と For…Next の違いと使い分けについて簡単に説明します。

For Each…Next ループは、オブジェクトのコレクションや配列の要素を効率的に処理する場合に使用されます。ループ変数には、コレクションや配列の要素が自動的に代入されます。これにより、要素に対する処理が簡潔に記述できます。

For…Next ループは、繰り返し回数が決まっている場合や、ループのカウンターを自由に制御したい場合に使用されます。ループ変数には、開始値から終了値までの数値が順番に代入されます。ループ内で要素にアクセスするためには、ループ変数をインデックスとして使用します。

どちらのループを使用するかは、処理対象のデータ構造や目的に応じて決定します。オブジェクトのコレクションや配列の要素に対して同じ操作を行う場合は、For Each…Next ループが適しています。一方で、繰り返し回数が決まっている場合や、ループのカウンターを制御する必要がある場合は、For…Next ループを使用します。

まとめ

今回の記事では、For Each…Next ループの基本構文や実践例を学びました。オブジェクトのコレクションや配列の要素を効率的に処理するためには、For Each…Next ループが適しています。また、For Each…Next ループとFor…Next ループの違いと使い分けについても説明しました。この知識を活用して、VBAプログラムをより効率的に作成していきましょう。

演習問題

次の問題に挑戦して、For Each…Next ループの理解度を確認しましょう。

問題1: Excelのワークシートに配置された全てのシェイプを選択状態にするVBAコードを、For Each…Next ループを使用して作成してください。

問題2: セル範囲”A1:E10″内の数値が10より大きい場合に、セルの背景色を黄色にするVBAコードを、For Each…Next ループを使用して作成してください。

解答

解答1:


Sub SelectAllShapes()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        shp.Select Replace:=False
    Next shp
End Sub

解説1: このコードでは、ActiveSheet.Shapesコレクションの各要素(シェイプ)に対して、Selectメソッドを実行して選択状態にします。Replace引数をFalseに設定することで、既存の選択状態を解除せずにシェイプを追加選択できます。

解答2:


Sub HighlightLargeNumbers()
    Dim rng As Range
    Dim cell As Range
Set rng = Range("A1:E10")
For Each cell In rng
    If cell.Value > 10 Then
        cell.Interior.Color = RGB(255, 255, 0)
    End If
Next cell
End Sub

解説2: このコードでは、セル範囲”A1:E10″内の各セルに対して、If文を使ってセルの値が10より大きいかを判定しています。値が10より大きい場合には、cell.Interior.ColorプロパティをRGB関数を使って黄色に設定しています。

簡単な解説

この演習問題では、For Each…Next ループを使って、シェイプの選択やセルの背景色変更などの処理を実装しました。For Each…Next ループを使うことで、オブジェクトのコレクションや配列の要素に対して効率的に処理を行うことができます。これらの問題を通じて、For Each…Next ループの基本構文や実践的な使い方について理解を深めることができました。

コメント