の派生版ですの!
引数に 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 オブジェクト。紛らわしい。
エクセルのセルやシートから離れた話題になってくると、ウェブ上の情報は少なくなっていくように感じます。今回は解決方法が見つかってよかったですわ♪
以上です。