セルに付けた名前を表示するマクロ
こちらの記事やこちらの記事において、Excelでは、セルに名前をつけて運用することをおすすめしています。
名前をつける領域が1つや2つだったり、理路整然と名前が付けられていれば、特に混乱することはありません。
しかし、名前をつけている領域が多数で複雑だったり、他人からもらったExcelシートを使ったりする場合は、名前が指しているセルをすぐに把握できない場合があります。
そのような場合に、セルに付けられた名前を表示するマクロがあると便利ですので、作ってみました。
'--------------------------------------------------------------------
' Summary: セルに付けられた名前を表示する
'--------------------------------------------------------------------
Sub ShowNames()
Dim nme As Name ' 検索用Nameオブジェクト
Dim rng As Range ' 名前表示用Rangeオブジェクト
' 元シートに影響を与えないように、シートをコピー
ActiveSheet.Copy
' コピーしたシート上の表示をクリア(罫線は残る)
Cells.ClearContents
' コピーしたシートに、Namesオブジェクトもコピーされるので順に調査
For Each nme In Names
' 名前の参照先に当該シート名が含まれている場合は処理を続行
If InStr(nme.RefersTo, ActiveSheet.Name) > 0 Then
' 参照範囲をシアンで塗る。参照範囲の1文字目は等号なので無視
Range(Mid(nme.RefersTo, 2)).Interior.Color = vbCyan
' 参照範囲の個々のセルを処理対象にする
For Each rng In Range(Mid(nme.RefersTo, 2))
' セルに名前を表示。重複登録の場合は改行して表示
rng.Value = IIf(rng.Value <> "", _
rng.Value & vbCrLf, "") & nme.Name
Next rng
End If
Next nme
End Sub
使用例
使用例を示します。
このような天気情報の表があったとします。
「数式」タブ → 「名前の管理」 で、名前の一覧を見ることができます。
でも、参照範囲を見てもピンときません。
そこで、マクロを実行します。
セルに名前が付いている場合には、新たに作成されたシート上にその名前が示されます。
また、名前の付いている範囲は、シアン色で塗られています。
現在、このシートを開発している最中だとすると、「本州の天気」は、C10~C14の部分が抜けているので、手直しが必要なのかもしれません。
また、「十二時の天気」の前には、シートの中で有効な名前であることを示す「天気!」という文字が付いています。しかし、「六時の天気」の前にはそれが付いていませんので、ブック全体で有効な名前であることが分かります。よって、これらを参照する際には、特に気を付ける必要があるのかもしれませんし、場合によってはどちらかの名前をつけ直す必要があるかもしれません。
マクロの有用性は?
このマクロの使用頻度は高くありません。でも、Visual Basicから大規模で複雑なシートを制御するソフトを作成した際、デバッグ時に重宝しました。
コメント