For Each ... Next

【当サイト人気ソフト】
ナンプレ無双:問題作成・解析・印刷・プレイができる無料ナンプレソフト。雑誌掲載多数

For Each ... Next ステートメント

 For Each ... Next ステートメントは、配列やコレクションの各要素に対して、一連のステートメントを繰り返し実行するフロー制御ステートメントです。
 「選択しているセル範囲、全てのセルの値を調べる」「シート上の全てのオートシェイプを消去する」といった使い方が考えられます。
 配列やコレクションの要素数が変動しても、データの取りこぼしを防ぐのが特徴です。

構文

For Each element In group

	[statements]
	[Exit For]
	[statements]

Next [element]

For Each...Next ステートメントの構文は、次の指定項目から構成されます。


データ処理の順序

セル範囲

 セル範囲に対してFor Each...Nextステートメントを実行する場合の、データ処理順序は、下図の通りです。左上のセルから列方向に進み、選択範囲最後の列までくると、次の行の最初の列に進みます。

 
 尚、選択範囲の列数を取得し、ループ回数をカウントすることで、現在処理されているセル位置を取得すことが可能です(取得できるセルの位置は、選択範囲の左上のセルをCells(1,1)とした場合のものです)。取得方法は下記を参考にしてください。

Sub Cells_Location()

    Dim lngRow As Long
    Dim lngCol As Long
    Dim lngColumnsC As Long
    Dim lngIndex As Long
    Dim objRange As Range

    With Application
        lngColumnsC = .Selection.Columns.Count    '選択範囲の行数を取得
        For Each objRange In .Selection
            lngIndex = lngIndex + 1                         'ループ数をカウント
            lngCol = ((lngIndex - 1) Mod lngColumnsC) + 1      '列を取得
            lngRow = (lngIndex + lngColumnsC - 1) \ lngColumnsC   '行を取得
            MsgBox "Cells(" & lngRow & "," & lngCol & ") 値:" & objRange.Value
        Next
    End With
End Sub

オートシェイプ

 オートシェイプの場合は、セル範囲と異なり、位置ではなく挿入した順に処理されます。写真等の図形も同様に挿入した順になります。
 オートシェイプと写真をが混同しているシートの場合は、オートシェイプと図形の種類に関係なく、挿入した順に処理されます。


多次元配列変数

 多次元配列は、1次元、2次元、3次元...の順で処理されていきます。ですから、2次元配列はセル範囲の場合と同様の処理順になります。多次元配列の処理順序を確認するサンプルコードを下に記載しました。興味のある方は試してみて下さい。

Sub Order_Sample() '4次元配列の処理順序確認コード

    Dim intI As Integer, intII As Integer, intIII As Integer, intIIII As Integer
    Dim lngI As Long
    Dim lngValue(1 To 2, 1 To 2, 1 To 2, 1 To 2) As Long '4次元配列
    Dim varI As Variant

    For intIIII = 1 To 2
        For intIII = 1 To 2
            For intII = 1 To 2
                For intI = 1 To 2
                    lngI = lngI + 1
                    lngValue(intI, intII, intIII, intIIII) = lngI
                Next
            Next
        Next
    Next

    For Each varI In lngValue
        MsgBox varI
    Next
End Sub

Excel Tips for Teachers

Copyright (C) 2009- 坂江 保 All Rights Reserved.