命名って難しい

変数、関数、クラスなどなど実装より命名に毎回悩むタイプの人間による技術についてのメモ。

エクセル内に定義された名前の重複を解決するマクロ

やりたいこと

以下ダイアログメッセージの連発を叩きのめす。

移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前 'foo' が含まれています。 この名前を使用しますか?
- コピーまたは移動先のシートに定義されている名前を使用する場合は、[はい]をクリックします。
- 数式またはワークシートで参照する範囲の名前を変更する場合は、[いいえ]をクリックし、[名前の重複] ダイアログボックスに新しい名前を入力します。

先にデメリット

すべて消えます。

この方法は定義された名前をすべて削除します。

そのため、セルに名前を付けているとすべて消えます

対象としてはまっさらにする時の用途なのでご注意ください。

たまに復活します。

古い形式(.xls)など、削除したはずが謎のタイミングで復活する場合もあります。

そうなると諦めて新しいファイルに書式などを丁寧にコピーするしかないです多分。

やること

開発」タブを表示するようにする。

(ファイル→オプション→リボンのユーザー設定)

「開発」タブの「マクロの記録」をクリック、OKをで初期表示の名前で記録開始。

「開発」タブの「記録終了」をクリック

「開発」タブの「マクロ」をクリック

マクロの記録で付けた名前を選択して、「編集(E)」をクリック

以下のような状態になっていると思います。

Option Explicit

Sub Macro1()
'
' Macro1 Macro
'

'
End Sub

全部消して以下をコピペする

Option Explicit

Sub Macro1()
'
' Macro1 Macro
'
Dim n As Name
Dim s As Worksheet

' ブックの範囲の名前を削除
For Each n In ThisWorkbook.Names
    n.Delete
Next

' シートの範囲の名前を削除
For Each s In ThisWorkbook.Worksheets

  For Each n In s.Names
    n.Delete
  Next
Next
msgbox "あいつはもう消した!"
'
End Sub

F5キーを押す

メッセージが出たら終わり。

以上!