【ExcelVBA】ブック全体で特定文字(複数可)を削除・置換するマクロ

Excel/VBA

標準の[検索と置換]だと1ワードずつしか出来ず面倒なのでマクロで一括置換したい。そんな時に役立つ関数を作って見た。

スポンサーリンク

サンプルデータ


例えばこんな顧客情報があったとする。※内容はこちらで作ったダミーデータです。超絶便利。

先方では何かしらの判別の為記号を付けて運用しているが、そのままのデータだとVLOOKで当たらなかったり、システムに取り込めなかったり等色々と不都合が起きてしまう。
(※弊社実話)

今回はそれらを全シート一括でNULLに置換したい時の為のマクロです。

BulkReplace


以下コピペでそのまま利用可能。

Sub BulkReplace()

    Dim nSheetCnt    As Integer
    Dim nMOJICnt     As Integer
    Dim objSheet     As Excel.Worksheet
    Dim strMOJI(4)   As String    
    

  ' 置換したい記号を配列で持つ
    strMOJI(0) = "★"
    strMOJI(1) = "△"
    strMOJI(2) = "◇"
    strMOJI(3) = "●"
    strMOJI(4) = "◆"
    
    ' Sheet数分ループ
    For nSheetCnt = 1 To ActiveWorkbook.Sheets.Count
        Set objSheet = ActiveWorkbook.Sheets(nSheetCnt)
        
        ' 設定された文字分ループ
        For nMOJICnt = 0 To UBound(strMOJI)
        
          If objSheet.Name = strMOJI(nMOJICnt) Then
              objSheet.Name = ""
          End If

          objSheet.Cells.Replace What:=strMOJI(nMOJICnt), Replacement:="", LookAt:= _
          xlPart, SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False
          
        Next

    Next

    ' 完了メッセージ。お好みで
    Call MsgBox("完了しました")
    
End Sub

ブックのシート文ループし、Replaceメソッドで置換しています。これを個人用マクロブックに忍ばせて置けば、いつでもワンクリックで置換出来るコマンドの完成です。


今回は予め置換したい文字列が決定しているパターンでしたが、
もし消したい文字が動的な場合はFunction化して、消したい文字を引数として渡す形にしてみてもいいかもしれません(ᵔᴥᵔ)

コメント