の派生版ですの!
引数に Names オブジェクトの一部を渡すと、その文字列を含む Names オブジェクトをすべて削除するプロシージャを書きましたのでノートいたします♪
ActiveWorkbook.Names のポイント
- Names オブジェクトは、セルやセル範囲に付けられる名前を指す。
- Excel 2013 では、数式 > 名前の管理、で開いたウインドウの「名前」にあたる。
- ActiveWorkbook.Names(1).Delete や ActiveWorkbook.Names(“名前”).Delete で削除可能
- 名前指定で削除する場合は、シート名を含めないと一致せず、その結果削除できない場合があるので注意。
- シート名を含めた Names オブジェクトの Name プロパティは、「シート名!名前」というフォーマットで格納されている。
VBA コード
- 削除対象の特定ループ内で、削除対象 Names オブジェクトを削除してはいけない。
- For ループする要素数が変わってしまい、エラーとなる。
- そこで、2回めのループでは削除対象 Names オブジェクトの Name プロパティのコレクションでループし、Name が一致した Names オブジェクトを削除している。For ループの要素である Names オブジェクトの Name プロパティには一切変更を加えていない。
''' <summary>
''' 引数と部分一致する Names オブジェクトを削除します。
''' </summary>
''' <param name="strName">削除対象の Names オブジェクト名の一部分</param>
Public Sub DeleteName(ByVal strName As String)
' 削除対象の Names オブジェクトを特定
Dim colNames As Collection
Set colNames = New Collection
Dim vntItem As Variant
For Each vntItem In ActiveWorkbook.Names
If vntItem.Name Like "*" & strName & "*" Then
colNames.Add vntItem.Name
End If
Next vntItem
' 特定した Names オブジェクトを削除
Dim vntName As Variant
For Each vntName In colNames
ActiveWorkbook.Names(vntName).Delete
Next vntName
End Sub
おわりに
次のページが参考になりました!ありがとう存じます♪
- VBAのIf文で文字列を含むという条件を指定する-Like演算子・InStr関数 | インストラクターのネタ帳
- 名前定義(Names)|ExcelマクロVBA入門
- Names コレクションのメンバーが Name オブジェクト。紛らわしい。
エクセルのセルやシートから離れた話題になってくると、ウェブ上の情報は少なくなっていくように感じます。今回は解決方法が見つかってよかったですわ♪
以上です。
