以前、Wordで文字列リストを元に連続して置換するマクロについて書いたのですが、今度はExcel版です。
まず「文字列リスト」というシートと「作業」というシートを作成します。
文字列リスト
A | B | |
---|---|---|
1 | 検索文字列 | 置換文字列 |
2 | エディター | エディタ |
3 | プリンター | プリンタ |
4 | サーバー | サーバ |
文字列リストにはこのような置換用の表をセットしておきます。
マクロ
Sub 文字列リストに基づき連続して置換する()
i = 2
Do
x1 = Sheets("文字列リスト").Cells(i, 1)
x2 = Sheets("文字列リスト").Cells(i, 2)
Sheets("作業").Cells.Replace _
What:=x1, Replacement:=x2, _
SearchOrder:=xlByColumns, MatchCase:=True
i = i + 1
Loop Until Sheets("文字列リスト").Cells(i, 1) = ""
End Sub
i = 2
Do
x1 = Sheets("文字列リスト").Cells(i, 1)
x2 = Sheets("文字列リスト").Cells(i, 2)
Sheets("作業").Cells.Replace _
What:=x1, Replacement:=x2, _
SearchOrder:=xlByColumns, MatchCase:=True
i = i + 1
Loop Until Sheets("文字列リスト").Cells(i, 1) = ""
End Sub
マクロ(VBA)をこのように書きます。
使い方
「文字列リスト」シートに上のような置換用の表をセットします。
「作業」シートに置換を施したい元の内容をセットしておきます。
マクロ「文字列リストに基づき連続して置換する」を実行します。
置換すると元には戻せませんので注意してください。
コメント
利用させていただきました。ありがとうございます。
ただ、1~4の列を作るのであれば
x1 = Sheets(“文字列リスト”).Cells(i, 2)
x2 = Sheets(“文字列リスト”).Cells(i, 3)
にしないといけませんね。
特に1~4の列は単なる数字なので、ものすごい量の置換が行われます。
とても有用な記事ですので、ご対応よろしくお願いします。
すみません。枠(A~B、1~4)の行・列を作らなければいいだけでしたね、、、。
ただ、iが2から始まっているので、必要に感じました。
>flammingさん
ありがとうございます。
ご指摘のとおり、行が途切れると処理を止める、という手法を使っています。
こんにちは。マクロ素人です。
エクセルにて文中の数字を増税の為、8%の金額を10%に変更する作業をしております。
上記マクロで実行すると永遠にループしてしますのですが、
1回しか置換えしない方法は御座いますでしょうか?
お忙しい中恐縮ですが、ご教示いただけますと幸いです。
宜しくお願い致します。
>ちゃぼさん
遅くなり申し訳ありません。
無限ループする理由が思いつきませんでした。
こんにちは。まさに欲しかったマクロなので、早速、利用させていただいています。
甘えたついでにお願いなのですが、同時に色変更、太字化、網掛け設定が出来るとより便利に使えます。
別のマクロの一部から下記を転記したのですが、即デバッグ行きでした。(涙)
With Selection.Find.Replacement.Font
.Bold = False
.Color = wdColorRed
Selection.Range.HighlightColorIndex = wdTeal
End With
追加入力で対応いただけると大変助かります。
ご教示いただけますと幸甚です。
>なるとさん
置換した部分を目立つようにしたいということですね。
一箇所ずつ選択して置換するならば書いていただいたコードのようなやり方ができるかもしれませんが、ここで使っている手法では一気に置換するのでそれぞれの箇所の書式を変えることができません。
早速のご回答ありがとうございました。
そうですかぁ。残念です。
一気に置換できるのがメリットのマクロなので、納得です。
こんにちは。
このマクロ、とてもありがたいです。
できれば、対象を作業シートのB列及びN列にしぼるような限定をかけられると処理が早くなると思うのですが、どこに何を書き加えたらよいかご教示いただけないでしょうか?
おっくーさん
手元にExcelがなくて確認できませんが
Sheets(“作業”).Cells.Replace
の部分を
Sheets(“作業”).Range(“B1:B1000”).Replace
のようにするといいんじゃないかと思います。