VBA

【Excel】非表示の名前の対処方法

2019年6月23日

ブックの検査で 「非表示の名前」 が削除できない

Excelを他会社などに共有する際に、ブックの検査を使って
社外に漏れたらダメな情報などがないかチェックする機能があります。

Excel 情報タブ
Excelの情報タブよりブックの検査より

検査を実行後、「ドキュメントのプロパティと個人情報」などいくつかの項目は削除できますが、「非表示の名前」などいくつかの項目は自動的に削除できません。

Excel ドキュメントの検査
「ヘッダーとフッター」は削除できるが
「非表示の名前」は削除できない

非表示の名前が見つかりました。非表示の名前は自動的に削除することはできません。手動で削除してからもう一度ファイルを検査してください。

 と表示され、「詳細情報」ボタンが表示されるだけ。。。
2019年6月23日時点で推奨される解決策にある
作業中のブックで非表示に名前を削除するマクロ
を参照しようとしても404エラーが表示されます。どうしろと。。。

作業中のブックで非表示に名前を削除するマクロ(404エラー)
作業中のブックで非表示に名前を削除するマクロ 」をクリックしても404エラーが表示される

 

名前の管理

「非表示の名前」は名前の管理で確認できるはずだが・・・

「非表示の名前」は本来、名前の管理で保存されているデータなので
「数式」タブにある定義された名前をクリック

名前の管理
より表示できるはずなのですが、非表示扱いのため、表示がされません。

名前の管理一覧には何も表示されない

 

非表示の名前を表示させる

やっと本題
「名前の管理」に表示されていない名前を表示させるにはマクロを使って表示させるしか方法がないようなので表示させることにします。

マクロエディタの表示

Excel画面にて、[alt]と[F11]を同時に押下すると
Microsoft Visual Basic for Applicationsが表示されます。

Microsoft Visual Basic for Applications
Microsoft Visual Basic for Applications

  

Module(コードエディタ)の表示

[Alt]⇒[i]⇒[m]の順にキーを押下するとModule(コードエディタ)が表示されます。

Module1(コードエディタ)
Module1(コードエディタ)

 

コードの記述

Module1に下記コードを記述します。
関数名はお好みで

Public Sub VisibleNames()
    Dim name As Object
    For Each name In Names
        If name.Visible = False Then
            name.Visible = True
        End If
    Next
    MsgBox "すべての名前の定義を表示しました。", vbOKOnly
End Sub

[Excel] シートで非表示になっている名前の定義を消す方法
より。

 

コードの実行

Microsoft Visual Basic for Applications の上部タブにある再生(▶)ボタンまたは[F5]ボタン押下よりマクロを実行します。

[F5]ボタン押下するとマクロ一覧が表示されるので先ほど作成したマクロを実行します
[F5]ボタン押下するとマクロ一覧が表示されるので先ほど作成したマクロを実行します

実行後「すべての名前の定義を表示しました。」と表示されればOKです。

実行後

[名前の管理]の確認

再度名前の管理を確認すると非表示となっていた名前が表示されるようになっているかと思います。
※名前の管理の表示方法はこちらより

名前の管理
非表示されていた名前が表示される

あとは不要な名前情報を消していくだけです。

 

xlsxだとそのまま保存するとマクロ消してくれる

本来ならば今回削除したマクロを消す必要がありますが、保存形式がxlsxの場合自動的にマクロが、保存する際に
「次の機能はマクロなしのブックに保存できません」
と表示されます。
この警告画面にて「はい」を選択するとマクロ削除して保存してくれるので便利です。

マクロありのまま保存すると警告表示される。(xlsxの場合)

 

雑感

昔から使っているxlsxだと名前の管理が残っている場合が多いような気がします。
印刷範囲が非表示扱いで保存されているせいだったり、語り継がれたシートだったために「あああ」とか「aaa」とかの名前が多数残ってたりします。

ブックの検査は昔からありますが、社外に提出する際は実行したほうがいいです。
ワークシートの非表示とか検出してくれるので便利です。

名前の管理で保管されている情報はクリティカルなセキュリティ事故にはならないことが多いと思いますが、何かあった際の情報は最小限にするためにも削除したほうがいいですね。

-VBA
-, , ,