名前付き範囲を指定して全セルを処理するマクロ
以下のマクロは、引数で指定した名前付き範囲のすべてのセルを順番に処理します。
'*********************************************
'* 名前付き範囲の全セルを処理する
'* 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
このように名前付き範囲を引数で指定できるようにしておくと、同じマクロを複数の範囲で再利用できるため便利です。

