名前付き範囲を指定して全セルを処理するマクロ

以下のマクロは、引数で指定した名前付き範囲のすべてのセルを順番に処理します。

'********************************************* 
'* 名前付き範囲の全セルを処理する 
'* rangeName:名前付き範囲の名前
Sub ProcessNamedRange(ByVal rangeName As String)
    Dim targetRange As Range
    Dim cell As Range

    ' 「MyNamedRange」は名前で指定した範囲の名前です。適切な名前に置き換えてください。
    On Error Resume Next
    Set targetRange = Range(rangeName)
    On Error GoTo 0

    ' 名前で指定された範囲が存在するかを確認
    If Not targetRange Is Nothing Then
        ' 各セルに対して処理を行う
        For Each cell In targetRange
            ' ここにセルごとの処理を記述
            ' 例: MsgBox cell.Value
        Next cell
    Else
        MsgBox "指定された名前の範囲が存在しません。"
    End If
End Sub

使用例

名前付き範囲「MyNamedRange」が設定されている場合は、以下のように呼び出します。

Sub Sample()
    Call ProcessNamedRange("MyNamedRange")
End Sub

複数の名前付き範囲を処理したい場合も、同じプロシージャを再利用できます。

Sub Sample()
    Call ProcessNamedRange("売上データ")
    Call ProcessNamedRange("顧客一覧")
    Call ProcessNamedRange("集計範囲")
End Sub

マクロの説明

名前付き範囲の取得

Set targetRange = Range(rangeName)

引数で受け取った名前から、対応するセル範囲を取得します。

例えば、

ProcessNamedRange("売上データ")

を実行した場合は、

Range("売上データ")

と同じ意味になります。

名前付き範囲の存在確認

If Not targetRange Is Nothing Then

指定した名前が存在しない場合はエラーになるため、事前に取得できたか確認しています。

セルを順番に処理

For Each cell In targetRange

名前付き範囲内のすべてのセルを順番に処理します。

例えば、名前付き範囲が A1:A5 の場合、

  • A1
  • A2
  • A3
  • A4
  • A5

の順番で処理されます。

応用例

セルの値を表示

MsgBox cell.Value

セルを黄色にする

cell.Interior.Color = vbYellow

空白セルだけ処理

If cell.Value = "" Then
    cell.Interior.Color = vbRed
End If

このように名前付き範囲を引数で指定できるようにしておくと、同じマクロを複数の範囲で再利用できるため便利です。

Follow me!