Excel VBAで定義された範囲の名前をリンク付きで一覧表示するマクロの紹介
このマクロが実現すること
Excelのワークシートには、特定のセル範囲に名前を付ける「定義された範囲の名前」という機能があります。この記事で紹介するマクロを使えば、登録されているすべての「定義された範囲の名前」をアクティブセルからハイパーリンク付きで一覧表示することができます。
なお、自動ハイパーリンクが不要であるならば「数式」タブの「定義された名前・数式で使用」から「名前の貼り付け・リスト貼り付け」で事足ります。このマクロは定義された名前のリストをハイパーリンク付きで作成したい場合に導入してください。

マクロの特徴
- 定義された名前の一覧を取得し、アクティブセルから一覧表示します。
- 「ブック」や「シート」などの範囲も表示します。
- 参照範囲はハイパーリンクとして提供され、クリックするだけで該当の範囲にジャンプできます。
マクロのコード
以下のコードをコピーし、お使いのExcel VBAエディタに貼り付けてください。
Sub ListDefinedNames()
Dim nameObj As Name
Dim currentRow As Long
Dim currentCol As Long
Dim scope As String
Dim targetSheet As Worksheet
Dim displayedRef As String
Dim subAddress As String
' アクティブシートとアクティブセルの位置を取得
Set targetSheet = ActiveSheet
currentRow = ActiveCell.Row
currentCol = ActiveCell.Column
For Each nameObj In ThisWorkbook.Names
' 名前をセット (シート名を取り除く)
If InStr(nameObj.Name, "!") > 0 Then
targetSheet.Cells(currentRow, currentCol).Value = Split(nameObj.Name, "!")(1)
Else
targetSheet.Cells(currentRow, currentCol).Value = nameObj.Name
End If
' スコープ(範囲)をセット
If nameObj.Parent Is ThisWorkbook Then
scope = "ブック"
Else
scope = nameObj.Parent.Name
End If
targetSheet.Cells(currentRow, currentCol + 1).Value = scope
' 参照範囲をセット
displayedRef = Mid(nameObj.RefersTo, 2) ' 先頭の"="を除去
subAddress = Replace(nameObj.RefersTo, "=", "")
targetSheet.Cells(currentRow, currentCol + 2).Value = displayedRef
targetSheet.Hyperlinks.Add Anchor:=targetSheet.Cells(currentRow, currentCol + 2), Address:="", _
SubAddress:=subAddress, TextToDisplay:=displayedRef
currentRow = currentRow + 1
Next nameObj
End Sub実行後の確認点
マクロを実行すると、以下の情報がアクティブセルから順に表示されます:
- 定義された範囲名
- その範囲名が属している範囲(ブックまたはシート名)
- 定義された名前の参照範囲(この部分はハイパーリンクとして提供されます)

使用時の注意点
- このマクロはアクティブなセルを起点に情報を表示しますので、情報を表示したい位置を事前に選択してください。
- 定義された名前が非常に多い場合、一覧が長くなる可能性がありますので、十分な空きスペースを確保してからマクロを実行してください。
- ハイパーリンクは、シート内の参照範囲へのジャンプをサポートしています。外部のファイルやウェブサイトへのリンクはサポートしていません。
コメント