2017年05月23日

ブック内の名前定義を削除するExcel VBAマクロ (不要と思われるセル参照の削除)

要りもせん (どこででも何にでも使ってやせん) 名前定義をそのままにしておくと、なにかとウザいことがございます。消しましょう。
 
名前定義。これですな、ずうっと気付かれずにいること、多いんですわ。処理自体に影響がない場合が大体ですので。で、要らんもんをくっつけたままコピーされたりメールされたり転用されたりして、増殖してゆくんですよ。これ、ウィルスじゃあないんですけど、「感染している」て表現していいと思います。

(ex. 関わったことのある職場 (複数件) では、長年の「やりっぱなし」が積もりに積もり重なって、おびただしい感染量に。もちろんその感染、自社内にとどまらず、ですわ。そしてその現状が、誰にも認識されておらん。セル参照先を見てみると、意図して定義してあるとは思えぬものばかり。それ以前に大体は参照エラーになっています。)



[放っておくとどんな害がある ?]

放置でも処理に実害はないです。あるとすれば…

・シートをコピーして増やそうと思った時に繰り返し「名前を使用しますか?」的なことを聞かれて「はい」で答えまくらなければならぬハメになったり。
・保存時に「有効な参照範囲と競合する名前がある」旨のウォーニングが表示されたり。
・しかし何より、セキュリティ (情報漏洩) の観点から、見過ごせぬ問題です。セル参照先が見せてはならぬトコになっちゃってるかもしれませんからね。



[注意事項]
なにもマクロ使わなくても削除できるのでは、と思うカタも おられよう。しかし注意。
 
「数式」タブ⇒「名前の管理」画面に表示されないもの (「Visible:=False」指定のもの) は「名前の管理」画面から削除ができません。そういったものは、ツール(マクロ)を作成しての削除とならざるを得ません。

※ 「Print_Titles」のような必要な名前まで消してしまわぬよう要注意。



[というわけで、実際の、マクロ (現物)。]
(以下を貼って ご使用ください。)
 
 ↓↓↓↓↓
 
'名前定義を一括削除するマクロ
'ファイルのバックアップを取った上で使用してください。
'下記の例では、「Print_Titles」(印刷時の行見出し・列見出しの設定)は残します。
'それ以外は削除するか見送るかを個別に判断してください。
'(「FilterDatabase」(オートフィルタの設定)、「Print_Area」(印刷範囲の設定)、など、
'場合によっては必要な名前定義もあります(一概に判断できない))。
Sub delName()
Dim obj As Variant
Dim tmp As String
Dim msgTxt As String
Dim cnt_Y
Dim cnt_N
Dim cnt_S
cnt_Y = 0
cnt_N = 0
cnt_S = 0
Call WriteLog(ActiveWorkbook.Name & " 名前定義を一括削除、Start !!")
For Each obj In ActiveWorkbook.Names
tmp = obj.Name
If InStr(tmp, "Print_Titles") = 0 Then
Select Case MsgBox(tmp & " を削除します。", vbYesNoCancel)
Case vbYes
obj.Delete
cnt_Y = cnt_Y + 1
msgTxt = tmp & " が削除されました。"
Case vbNo
cnt_N = cnt_N + 1
msgTxt = tmp & " の削除は見送られました。"
Case vbCancel
msgTxt = tmp & " 以降、処理を中断しました。"
Call WriteLog(msgTxt)
Exit For
End Select
Call WriteLog(msgTxt)
Else
MsgBox tmp & " をスキップします。"
cnt_S = cnt_S + 1
Call WriteLog(tmp & " はスキップされました。")
End If
Next
msgTxt = ActiveWorkbook.Name & " において、" _
& vbCrLf & cnt_Y & "件の名前定義が削除されました。" _
& vbCrLf & cnt_N & "件の名前定義の削除が見送られました。" _
& vbCrLf & cnt_S & "件の名前定義がスキップされました。"
MsgBox msgTxt
Call WriteLog(msgTxt)
End Sub
'
'ログを残す。
Sub WriteLog(str As String)
Open ThisWorkbook.Path & "\log.txt" For Append As #1
Print #1, str & vbCrLf
Close #1
End Sub




[前回の日記。]
 ↓ 
[ブック内の名前定義を検出するExcel VBAマクロ (不要と思われるセル参照の検出)]

[関連する日記。]
 ↓ 
[テーマ「コンピュータ」のブログ記事一覧]

[解説・使用例など。]
 ↓ 
「Excel VBA] 99. 「VBA実例集エクセル」 (更新・追加、随時ばんばん入っています)。


Excel VBA 本格入門 ~日常業務の自動化からアプリケーション開発まで~
技術評論社
大村 あつし

amazon.co.jpで買う
Amazonアソシエイト by Excel VBA 本格入門 ~日常業務の自動化からアプリケーション開発まで~ の詳しい情報を見る / ウェブリブログ商品ポータル


hinden Takahashi, Hideki ひんでん 高橋 秀樹 | facebookひんでん (ユリコ暴走)(@Gemini_hinden)さん | Twitter


hinden Takahashi, Hideki / ひんでん 高橋 秀樹--------
about me
--------
hinden Takahashi, Hideki
ひんでん 高橋 秀樹
http://hinden.at.webry.info/200002/article_1.html

[events]
イベント情報一覧
http://www2u.biglobe.ne.jp/~hinden/live/
ラベル:コンピュータ
【関連する記事】
posted by (旧) hinden (まほまほファミリー) at 19:58| 東京 ☀| Comment(0) | TrackBack(0) | コンピュータ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック