標準の[検索と置換]だと1ワードずつしか出来ず面倒なのでマクロで一括置換したい。そんな時に役立つ関数を作って見た。
サンプルデータ
例えばこんな顧客情報があったとする。※内容はこちらで作ったダミーデータです。超絶便利。
先方では何かしらの判別の為記号を付けて運用しているが、そのままのデータだとVLOOKで当たらなかったり、システムに取り込めなかったり等色々と不都合が起きてしまう。
(※弊社実話)
今回はそれらを全シート一括でNULLに置換したい時の為のマクロです。
BulkReplace
以下コピペでそのまま利用可能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
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化して、消したい文字を引数として渡す形にしてみてもいいかもしれません(ᵔᴥᵔ)
コメント