PR

【VBA】完全一致や部分一致で文字列を検索・置換する

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、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

タイトルとURLをコピーしました