Sub TEST1()
Dim a
Set a = ActiveSheet.Cells(1, 1).Name '名前の定義を取得
Debug.Print "名前:" & a.Name '名前を取得
Debug.Print "参照先:" & a.RefersTo '参照先を取得
Debug.Print "親要素:" & a.Parent.Name '親要素を取得
Debug.Print "シート名:" & Range(a).Parent.Name 'シート名を取得
End Sub
セルA1に、ブック単位で「名前1」という名前を定義しました。
「ブック単位」の名前の定義を設定しておいた
では、VBAコードを実行して、名前の定義を取得してみます。
「ブック単位」の名前の定義を取得
ブック単位の名前の定義を、取得できました。
ブック単位なので、「親要素」が「TEST.xlsm」でブック名となっています。
シート単位の名前の定義を取得
次は、シート単位で定義した名前で、「名前」と「参照先」、「親要素」、「シート名」を取得してみます。
VBAコードは、先ほどと同じです。
Sub TEST2()
Dim a
Set a = ActiveSheet.Cells(1, 1).Name '名前の定義を取得
Debug.Print "名前:" & a.Name '名前を取得
Debug.Print "参照先:" & a.RefersTo '参照先を取得
Debug.Print "親要素:" & a.Parent.Name '親要素を取得
Debug.Print "シート名:" & Range(a).Parent.Name 'シート名を取得
End Sub
Sub TEST3()
i = 1
'ブック内の名前の定義で、ループ
For Each a In ActiveWorkbook.Names
i = i + 1
ActiveSheet.Cells(i, 1) = a.Name '名前を取得
ActiveSheet.Cells(i, 2) = "'" & a.RefersTo '参照先を取得
ActiveSheet.Cells(i, 3) = a.Parent.Name '親要素を取得
ActiveSheet.Cells(i, 4) = Range(a).Parent.Name 'シート名
Next
End Sub
「For Each」を使って、「ActiveWorkbook.Names」内の名前を取得します。
次のような名前の定義を、設定しました。
複数の名前の定義を設定しておいた
Sheet1とSheet2に、ブック単位とシート単位で、複数の名前の定義を設定しています。
では、全ての名前の定義を取得してみます。
「ブック内の全て」の名前の定義を取得
ブック内の全ての名前の定義を取得できました。
ブック単位の名前の定義を取得
次は、「ブック単位」の名前の定義を、取得してみます。
VBAコードは、次のようになります。
Sub TEST4()
i = 1
'ブック内の名前の定義で、ループ
For Each a In ActiveWorkbook.Names
'親要素が、ブック名の場合
If a.Parent.Name = ThisWorkbook.Name Then
i = i + 1
ActiveSheet.Cells(i, 1) = a.Name '名前を取得
ActiveSheet.Cells(i, 2) = "'" & a.RefersTo '参照先を取得
ActiveSheet.Cells(i, 3) = a.Parent.Name '親要素を取得
ActiveSheet.Cells(i, 4) = Range(a).Parent.Name 'シート名を取得
End If
Next
End Sub
ブック内の名前の定義を取得して、「親要素」が「ブック名と同じ」場合に、名前を取得します。
次のような名前の定義を、設定しました。
複数の名前の定義を設定しておいた
Sheet1とSheet2に、ブック単位とシート単位で、複数の名前の定義を設定しています。
では、ブック単位の名前の定義を取得してみます。
「ブック単位」の名前の定義を取得
ブック単位の名前の定義を取得できました。
シート単位の名前の定義を取得
次は、「シート単位」の名前の定義を、取得してみます。
「Sheet2」の名前の定義を取得するVBAコードは、次のようになります。
Sub TEST5()
i = 1
'シートの名前の定義で、ループ
For Each a In Worksheets("Sheet2").Names
i = i + 1
ActiveSheet.Cells(i, 1) = a.Name '名前を取得
ActiveSheet.Cells(i, 2) = "'" & a.RefersTo '参照先を取得
ActiveSheet.Cells(i, 3) = a.Parent.Name '親要素を取得
ActiveSheet.Cells(i, 4) = Range(a).Parent.Name 'シート名を取得
Next
End Sub
Sub TEST6()
i = 1
'シートの名前の定義で、ループ
For Each a In ActiveWorkbook.Names
If Range(a).Parent.Name = "Sheet2" Then
i = i + 1
ActiveSheet.Cells(i, 1) = a.Name '名前を取得
ActiveSheet.Cells(i, 2) = "'" & a.RefersTo '参照先を取得
ActiveSheet.Cells(i, 3) = a.Parent.Name '親要素を取得
ActiveSheet.Cells(i, 4) = Range(a).Parent.Name 'シート名を取得
End If
Next
End Sub
Sub TEST7()
'ブック内の名前の定義で、ループ
For Each a In ActiveWorkbook.Names
'選択したセル範囲と、名前の定義の範囲が、一致した場合
If Not Intersect(Range(a.RefersTo), Selection) Is Nothing Then
Debug.Print a.Name '名前を取得
End If
Next
End Sub