選択範囲の操作


選択範囲を1セルずつ操作する

選択範囲を1セルずつ操作するには、For Eachステートメントが便利ですね。たとえば、次のような感じです。

Sub Sample2()
    Dim c As Range
    For Each c In Selection
        ''c に対する処理
    Next c
End Sub

このとき、For Eachステートメントによって呼び出されるセルは、まず行方向に進みます。次の例を見るとわかりやすいですね。

Sub Sample3()
    Dim c As Range, i As Long
    For Each c In Selection
        i = i + 1
        c.Value = i
    Next c
End Sub

もちろん、For EachステートメントではなくFor Nextステートメントでも操作できます。

Sub Sample4()
    Dim i As Long
    For i = 1 To Selection.Count
        Selection(i) = i
    Next i
End Sub

もう少し実用的な例を示しましょう。次のマクロは、選択した範囲を、1行おきに塗りつぶします。

Sub Sample5()
    Dim i As Long, S As Long, E As Long
    S = Selection(1).Column
    E = Selection(Selection.Count).Column
    For i = Selection(1).Row To Selection(Selection.Count).Row Step 2
        Range(Cells(i, S), Cells(i, E)).Interior.ColorIndex = 15
    Next i
End Sub

あくまでサンプルです。

Step 2で1行おきに処理していますけど、使い勝手をよくするのなら、奇数行と偶数行を判定して、塗りつぶしと塗りつぶし解除の両方を行った方がいいかも。あと、変な領域が選択されているかどうかをチェックするエラー対策も、できればあった方がいいですね。まあ、そのへんは、各自で考えてくださいな(笑)。