カテゴリー
Microsoft

【Excel VBA】特定の ActiveWorkbook.Names (Names オブジェクト) を削除するコード!

の派生版ですの!

引数に 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

おわりに

次のページが参考になりました!ありがとう存じます♪

エクセルのセルやシートから離れた話題になってくると、ウェブ上の情報は少なくなっていくように感じます。今回は解決方法が見つかってよかったですわ♪

以上です。

コメントを残す