ゼロスタートで1BTC達成  (`・ω・´)σ  普通の会社員がコツコツ資産運用で生活向上するBlog

【Excel VBA】置換|Replaceメソッドと関数|文字列や数値の置き換え

  • 2022-04-08
  • 2024-03-11
  • Excel

Replace(リプレイス)は「ある文字列を別の文字列に置き換えたい時」に使います。

ReplaceメソッドとReplace関数の違い

ある文字列をを別の文字列に置き換えるというザックリした表現で言えば同じですが、使い勝手が異なります。

(*’ω’*)σ それぞれのメリット・デメリットがあるので、のちほど比較しながら解説します。

ReplaceメソッドReplace関数
セル範囲の中から指定の文字列を置き換える文字列の中から指定の文字列を置き換える
検索で言うとFindメソッドにあたる検索で言うとInStr関数にあたる

▼ Replaeメソッドのメリット・デメリット

  •  メリット
      🔹ワイルドカード「*」が使用できる
      🔹オブジェクトをセル範囲にすれば複数のセルに一気に実行できる
  •  デメリット
      🔹セルがそのまま置き換わるので元データを残すのは不可
      🔹ワークシート「検索と置換」ダイアログの影響を受けてしまう
      🔹オートフィルターで非表示になっているセルは感知できない

▼ Replace関数のメリット・デメリット

  •  メリット
      🔹関数なので変数やシート名なども置換できる
      🔹置き換えた結果を別の場所に出力したりもできる
  •  デメリット
      🔹複数のセルに実行するにはFor…Nextなどループ処理が必要

Replaceメソッドの使い方・使用例

指定したセル範囲内から検索した文字列を他の文字列に置換する場合に使用します。

基本構造
Rangeオブジェクト.Replace(What,Replacement,引数3…)
✔ 引数1はWhat 検索する文字列を指定
✔ 引数2はReplacement 置き換える文字列を指定

✔ 引数3以降は必要に応じて使用する

引数用途設定値内容
What検索する文字を指定任意の文字列
Replacement置き換える文字を指定任意の文字列
LookAt検索条件を指定xlWhole完全一致
xlPart部分一致
SearchOrder検索の方向を指定xlByRows行方向
xlByColumns列方向
MatchCase大文字と小文字を区別して検索するか?True,False区別する→True
区別しない→False
MatchByte全角と半角を区別して検索するか?True,False区別する→True
区別しない→False
SearchFormat
検索するセルの書式を指定するか?True,False区別する→True
区別しない→False
ReplaceFormat置換するセルの書式を指定するか?True,False区別する→True
区別しない→False

完全一致の置換|シンプル構造

仕入担当の小林さんが退職して木下さんが引き継ぐので「小林→木下」の置換を行います。

使用例  小林さんを木下さんに入れ替え

Sub 小林さん退職()
 Range(“A4:F13″).Replace What:=”小林”, Replacement:=”木下”, LookAt:=xlWhole
End Sub

セルA4からF13の範囲で「小林」と完全一致する文字列を「木下」に置換するという内容です。
完全一致なのでLookAtの設定値はxlWholeです。実行すると下図のように置き換わります。

部分一致の置換|さらに検索されたセルに書式を設定

使用例  「ベリー」が付くいちごを「○○ベリー☆」に置換+書式を設定

Sub なんたらベリー()
 With Application.ReplaceFormat
 ‘置換後の書式を設定
  .Font.Bold = True ‘太字にする
  .Interior.ColorIndex = 22 ‘セルをコーラルピンクに塗りつぶす
 End With

 Range(“A4:F13″).Replace What:=”ベリー”, Replacement:=”ベリー☆”, LookAt:=xlPart, _ SearchFormat:=False, ReplaceFormat:=True
‘セルA4からF13の範囲で「ベリー」の部分を「ベリー☆」にしてセルに書式を設定する
‘置換前のセルの書式は特に指定無し

End Sub

まずWithでまとめて書式の処理内容、次に置換の処理内容、そして書式の設定という流れです。
実行すると下図のようになります。

あいまい一致の置換|ワイルドカード「*」を使ってみる

3兄弟で仕入れをしていた伊藤さんが、伊藤商会を立ち上げました!
3人を「伊藤商会」に置き換えます。

使用例  伊藤さんたちを「伊藤商会」に置換

Sub 伊藤商会発足()
 With Application.ReplaceFormat
 ‘置換後の書式を設定
  .Font.Bold = True ‘太字にする
  .Interior.ColorIndex = 22 ‘セルをコーラルピンクに塗りつぶす
 
End With
 Range(“A4:F13″).Replace What:=”伊藤*”, Replacement:=”伊藤商会”, LookAt:=xlPart, _ SearchFormat:=False, ReplaceFormat:=True

‘セルA4からF13の範囲で「伊藤」を含む文字列を「伊藤商会」にしてセルに書式を設定する
‘置換前のセルの書式は特に指定無し

End Sub

実行すると下図のようになります。

パッと見では違いが分かりにくいですが、ワイルドカード「*」を使わないと・・・
「伊藤」の部分だけが「伊藤商会」になるので、置換後が「伊藤商会(直」になってしまいます。どのように置換したいかによって使い分けましょう。

Replace関数の使い方・使用例

Replaceメソッドではセルを対象に置換を行いましたが、Replace関数では任意の文字列を対象に置換を行います。

基本構造
 Replace(Expression,Find,Replace,Start,Count,Compare)
 引数を日本語で書くと・・・
 Replace(対象文字列,検索文字列,置換文字列,開始位置,置換回数,比較モード)
 開始位置・置換回数・比較モードは省略可能

引数内容
Expression(対象文字列)置換対象となる元の文字列を指定する
Find(検索文字列)対象文字列内で検索される文字列を指定する
Replace(置換文字列)検索文字列と置き換える文字列を指定する
Start(開始位置)検索を開始する位置を指定 ※省略時は1
Count(置換回数)置換する回数を指定 ※省略時は全て置換
Compare
(比較モード)
・vbBinaryCompare(規定値)
「大文字・小文字」「半角・全角」「ひらがな・カタカナ」を区別して検索
・vbTextCompare
「大文字・小文字」「半角・全角」「ひらがな・カタカナ」を区別しない

繰り返し処理を用いて複数の文字列を置換

先程Replaceメソッドで行った「小林さん退職して木下さんに交代」をReplace関数で行ってみます。同じ処理をする場合でプロシージャを比べてみます。

VBAのReplace関数で文字列の入れ替え処理をするExcel画面の画像

使用例  「小林」を「木下」に置換

Sub 小林さん退職2()
 Dim i As Long
 For i = 4 To 13
  If Cells(i, 6) = “小林” Then
   Cells(i, 6) = Replace(Cells(i, 6), “小林”, “木下”)
  End If
 Next i
End Sub

この場合だと、複数のセルを一括処理できるReplaceメソッドの方が簡単に使えますね。

数式を置換

合計値を求める数式を、平均値を求める数式に置換します。
セルD14に販売数量の合計を求める数式「=SUM(D4:D13)」が入っています。

VBAのReplace関数で数式の入れ替え処理をするExcel画面の画像

使用例  合計値を求める数式を、平均値を求める数式に置換

Sub 合計値から平均値()
 Range(“D14”) = Replace(Range(“D14”).Formula, “SUM(“, “SUBTOTAL(101,”)
End Sub

VBAのReplace関数で文字列の入れ替え処理をした後のExcel画面の画像