【VBA】ワイルドカードの置換をする
2017/02/26
コード内容
先にコードから紹介します。
Sub ワイルドカード置換() Cells.Replace what:="abc*", Replacement:="1番目の置換", _ LookAt:=xlWhole Range("A1:A500").Replace _ what:="?xyz", Replacement:="2番目の置換", _ LookAt:=xlWhole Range("B1:C500").Replace _ what:="~?edf", Replacement:="3番目の置換", _ LookAt:=xlPart Range("D1:D500").Replace _ what:="#?2??3??00", Replacement:="4番目の置換", _ LookAt:=xlPart Range("E1:E500").Replace _ what:="~*", Replacement:="5番目の置換", _ LookAt:=xlPart Range("F1:F500").Replace _ what:="~~", Replacement:="6番目の置換", _ LookAt:=xlPart If Range("G1").Value Like "1[?]*" Then Range("G1").Value = "7番目の置換" End If MsgBox "置換完了" End Sub
コードの説明
まずVBAのワイルドカードを備忘録的に書いておく。
?(クエスチョン、はてな) | 任意の1文字 |
#(シャープ) | 任意の1文字の半角数字 (0-9) |
*(アスタリスク) | 任意の数の文字※0文字は適用外 |
1番目の置換は「最初の3文字がabcで始まっているならその後どう続いてようがまとめて置換する」というもの。
2番目の置換はA1からA500の範囲で「最初の1文字はなんでもいいけどその後xyzと続いていたら置換する」というもの。完全一致。
3番目の置換はB1からC500の範囲で「?(クエスチョンマーク)の後にedfと続いていたらその部分を置換する」というもの。
4番目の置換はD1からD500の範囲で「最初が数字で始まっていて、その後2○○3○○00と続いていたらその部分を置換する」というもの。○に入るものは何でもいい。
5番目の置換はE1からE500の範囲で「*(アスタリスク)の部分を置換する」というもの。
6番目の置換はF1からF500の範囲で「~(チルダ)の部分を置換する」というもの。
7番目の置換はG1が「1、?(クエスチョンマーク)と始まっているならその後どう続いていようがまとめて置換する」というもの。
お気づきかもしれないがワイルドカード記号そのものを置換する時、Like関数とReplaceメソッドと扱い方が違う。
Like関数はワイルドカード記号を[](かっこ)で挟む必要があるし、Replaceメソッドはワイルドカード記号の前に~(チルダ)を入れる必要がある。注意すべし。
ぼくは「Likeは[](かっこ)、Replaceは~(チルダ)」と覚えた。ほんとはこういう覚え方はしちゃいけないんだろうけど。