Microsoft Excel VBA - 名前の定義と参照範囲の変更を行う方法
◆概要このページは、Excel VBAで名前の定義と参照範囲の変更を行う方法について記載しています。
◆WorkbookオブジェクトのRefersToプロパティ
次の例ではデータ入力範囲にある名前が既に定義されている場合にはRefersToプロパティーを用いて参照範囲を再定義し、まだ定義されていない場合にはAddメソッドを用いて名前を定義しています。
Sub RedifineNameRef() Dim Rng As Range Dim Nam As Name With ActiveWorkbook Set Rng = .Sheets("Sheet1").Cells(1, 1).CurrentRegion On Error Resume Next 'エラー時には次の処理へ Set Nam = .Names("範囲1") If Nam Is Nothing Then 'If Err <> 0 Then ・・・でも同じ .Names.Add Name:="範囲1", RefersTo:="=Sheet1!" & Rng.Address, _ Visible:=True Err.Clear Else Nam.RefersTo = "=Sheet1!" & Rng.Address '参照先の変更 'VisibleプロパティーをFalseに設定すると名前ボックスに現れない Nam.Visible = True End If End With End Sub
- すでに定義されている場合でもAddメソッドで同名の名前を追加することでも定義域は変更になります。
- Range("定義済みの名前")でRangeオブジェクトを取得できます。
◆2行目から範囲名をつけたい場合
上の例では1行目にある項目名も選択され、範囲名「範囲1」になります。
次の例では、1行目にある項目名を含めずに、2行目からのデータのみに範囲名「範囲2」をつけます。
Sub 範囲名再定義() Dim Rng As Range Dim Nam As Name With ActiveWorkbook lastCol = ActiveSheet.Range("a2").End(xlToRight).Column lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row ' 2行目以降を範囲名「範囲2」にする Set Rng = .ActiveSheet.Range("a2:" & _ ActiveSheet.Cells(lastRow, lastCol).Address) On Error Resume Next 'エラー時には次の処理へ Set Nam = .Names("範囲2") If Nam Is Nothing Then 'If Err <> 0 Then ・・・でも同じ .Names.Add Name:="範囲2", RefersTo:="=Sheet1!" & Rng.Address, _ Visible:=True Err.Clear Else Nam.RefersTo = "=Sheet1!" & Rng.Address '参照先の変更 'VisibleプロパティーをFalseに設定すると名前ボックスに現れない Nam.Visible = True End If End With End Sub▼ページトップへ