こんにちは、Ryoです。
指定した範囲からセルに入力されたデータを検索して指定文字に置き換えたいケースは多々あるかと思います。Replaceメソッドを利用すれば完全一致/部分一致(あいまいな条件で検索)で指定した文字列を置換することができますので、今回はその内容について書いていきます。
1.サンプル概要
先ず「完全一致」のサンプルですが、以下の表内にある「伊藤」「清水」を「佐藤」に置換します。
≪完全一致:実行前≫
≪完全一致:実行後≫
次に「部分一致」なのであいまいな条件で検索する形になります。サンプルでは表内の「高橋」の「高」を「髙」に置換します。
≪部分一致:実行前≫
≪部分一致:実行後≫
以上がサンプル概要になります。
2.サンプルコード
◆完全一致
Sub Sample1() 'セルA1を含む範囲を対象とし、「伊藤」「清水」を '「佐藤」へ置換する With Range("A1").CurrentRegion .Replace What:="伊藤", Replacement:="佐藤", LookAt:=xlWhole .Replace What:="清水", Replacement:="佐藤", LookAt:=xlWhole End With '※ LookAt:= xlWholeは完全一致指定 End Sub
◆部分一致
Sub Sample2() 'セルA1を含む範囲を対象とし、「高」を「髙」へ置換する Range("A1").CurrentRegion.Replace What:="高", _ Replacement:="髙", LookAt:=xlPart '※ LookAt:= xlPartは部分一致指定 End Sub
このようにReplaceメソッドを利用することでデータの検索・置換を行うことができます。
構文:オブジェクト.Replace(What, Replacement, LookAt, SearchOther, MatchCase, MatchByte, SearchFormat, ReplaceFormat)
引数Whatに指定した値を「検索」し、引数Replacementに指定した値に「置換」するものです。完全一致なら引数LookAtにxlWholeを指定し、部分一致ならxlPartを指定することで対応できます。
その他引数は以下の通りです。
引数 | 内容 |
What | 検索するデータを指定 |
SearchOrder | 検索の方向を指定。使用できる定数はxlSearchOrderクラスのxlByRows(行)、xlByColumns(列) |
MatchCase | 大文字と小文字を区別する場合:True、規定値はFalse |
MatchByte | 半角・全角を区別する場合にTrue指定 |
SearchFormat | 検索の書式を指定する場合にTrue指定 |
ReplaceFormat | 置換データの書式を指定する場合にTrue指定 |
完全一致を指定して使用する場合は特に問題ないのですが、部分一致の場合は上述のサンプルの場合、例えば指定範囲に置換する必要がない「日高」があった場合「日髙」に置換されてしまうので用途に応じて使い分け等、扱いには注意が必要です。
3.まとめ
このようなデータ置換関連は便利なので扱うことも多いのですが、予期せぬ部分まで置換されてしまうケースもあるので、膨大なデータなどに対して処理を行うような場合は元に戻せる手段(バックアップ等)を講じてから処理を行う方が無難です。
また、置換したデータによってはセルのデータ形式が自動的にかわってしまう(全角/→半角/で日付データ化)こともあるので、このような点を気を付けて扱う分には有用かと思いますから、機会があればご活用ください。
以上、完全一致や部分一致で文字列を検索・置換する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo