MENU

【初心者向け】VBAのReplace関数・Replaceメソッドの違いと使い方を徹底解説

VBAで文字列操作を行う際、特定の文字や部分文字列を他の文字に置き換えることがよくあります。VBAでは、この作業を簡単に行うためのReplace関数とReplaceメソッドが用意されています。この記事では、これらの違いと使い方について詳しく説明します。

目次

Replace関数の基本と使い方

Replace関数は、文字列の中から指定した文字を検索して、別の文字に置き換えるための関数です。

構文と引数の解説

Replace関数の基本的な構文は以下の通りです。

Replace(Expression, Find, Replace, [Start], [Count], [Compare])
引数説明必須/任意
Expression置換対象となる文字列必須
Find検索する文字列必須
Replace置き換える文字列必須
Start文字列のどこから検索を開始するかを指定(省略時は1)任意
Count置き換える数を指定(省略時はすべて)任意
Compare文字列比較の方法を指定(省略時はバイナリ比較)任意

引数のポイント!

  • Expression: 元の文字列。
  • Find: 検索する文字列。
  • Replace: 置き換える文字列。
  • Startを指定すると、文字列の途中から置き換えを始めることができます。
  • Countを使うと、最初の何件だけ置換するなどの制御が可能です。
  • Compareには以下のオプションがあります。
    • vbBinaryCompare :大文字・小文字を区別して比較(デフォルト)
    • vbTextCompare:大文字・小文字を区別せずに比較

注意ポイント

Replace関数を使う際は、大文字小文字の区別や、検索を開始する位置(Start)、置き換える回数(Count)に気をつける必要があります。
特にデータ量が多い場合、意図しない置換が大量発生してしまうリスクがあるため、まずは少量のテストデータで動作確認してから実際のデータに適用するのが安全です。

Replace関数の基本的な使用例

Replace関数を使った基本的な例を紹介します。

例1:単純な文字列置換

Sub ReplaceSample1()
    Dim str As String
    str = "Hello World"
    str = Replace(str, "World", "VBA")
    MsgBox str  ' 結果:Hello VBA
End Sub

上記コードでは、「World」という文字を「VBA」に置き換えています。

例2:部分的に置換(Start引数を使用)

Sub ReplaceSample2()
    Dim str As String
    str = "123-456-123"
    str = Replace(str, "123", "999", 5)
    MsgBox str  ' 結果:123-456-999
End Sub

上記コードではStartを使用することにより、5文字目以降にある「123」だけを置き換えています。

Replace関数の応用例と注意点

Replace関数の応用例

Replace関数は、単純な文字列置換だけでなく、複数の語句を一括で置き換えるような応用的な使い方も可能です。

例えば、社名や用語など、いくつもの表現を一気に別の言葉に変えたいときに非常に役立ちます。

以下は、配列とループを組み合わせて複数語を一括置換する例です。

Sub ReplaceMultipleWords()
    Dim str As String
    Dim findWords As Variant
    Dim replaceWords As Variant
    Dim i As Long
    
    str = "A社とB社とC社がプロジェクトに参加します"
    
    findWords = Array("A社", "B社", "C社")
    replaceWords = Array("Apple Inc.", "BlackRock, Inc.", "Chevron Corporation")
    
    For i = LBound(findWords) To UBound(findWords)
        str = Replace(str, findWords(i), replaceWords(i))
    Next i
    
    MsgBox str  ' 結果:Apple Inc.とBlackRock, Inc.とChevron Corporationがプロジェクトに参加します
End Sub

コードの解説

  • findWords配列に置換対象の文字列を格納
  • replaceWords配列にそれぞれ対応する置換後の文字列を格納
  • ループで順番にReplaceを実行

このようにすることで、大量の表現を一括で置換できるため、作業効率が大幅にアップします。

Replace関数の注意点

Replace関数は、指定した文字列に一致するすべての箇所を置き換えます。
そのため、置換対象が予想以上に広がることがあり、意図しない部分が変わってしまうリスクもあります。

特に注意が必要なのはこのようなケースです。

  • 短い置換対象文字列(例:「a」や「1」など)
  • 単語の一部にマッチしてしまう

具体例を踏まえて考えてみましょう。

例えば、成績表に「優」「良」「可」「不可」といった評価があったとします。

ここで「優」を「秀」に変えたいと考えた場合、次のように置換処理を行うとします。

Sub UnexpectedReplaceGrade()
    Dim str As String
    str = "あなたは優秀な成績をおさめました。" & vbLf & _
    "成績:優、良、可、不可"
    
    ' 「優」を「秀」に置換
    str = Replace(str, "優", "秀")
    
    MsgBox str
End Sub

このコードを実行すると下記のようなメッセージが表示されます。

問題点

  • 「優」という文字が「成績:優」にのみ置換されるべきだったのに、「優秀」も置換対象に含まれてしまった。
  • 結果、「秀秀」という意味不明な表現に変わり、文章が読みづらくなってしまった。

この例から分かるように、置換対象の文字列が他の単語の一部として使われている場合、部分一致が原因で予期しない置換が発生することがあります。

例えば、成績表の「優」を「秀」に置換する時、**「優秀」**という単語にもマッチしてしまうため、「秀秀」となってしまいました。

このような問題を避けるためには、単語単位で置換するか、前後のスペースや区切り文字を意識した置換を行うことが重要です。

Replaceメソッドの基本と使い方

Replaceメソッドとは?

Replaceメソッドは、Rangeオブジェクトに対して使う置換機能です。

セルやセル範囲内のデータに対して、文字列を置き換える処理を実行します。

Excelの「検索と置換(Ctrl + H)」を、プログラムで自動化したイメージです。

Replaceメソッドの構文

Replaceメソッドの基本構文は以下の通りです。

RangeObject.Replace(What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat])

引数の説明

引数説明必須/任意
What検索する文字列必須
Replacement置換後の文字列必須
LookAt部分一致か完全一致か指定(例:xlPartxlWhole任意
SearchOrder検索順序(行ごとか列ごとか)任意
MatchCase大文字と小文字を区別するかどうか任意
MatchByte半角・全角を区別するかどうか任意
SearchFormat書式を指定して検索するか任意
ReplaceFormat書式を指定して置換するか任意

Replaceメソッドの基本的な使用例

例1:セル内の文字列置換

下記コードで、A1セル内の「テスト」という文字が「成功」に置き換えられます。

Sub ReplaceCell()
    Range("A1").Replace What:="テスト", Replacement:="成功"
End Sub

例2:シート全体で置換

下記コードでは、シート全体の「未入力」という文字を「0」に置き換えています。

Sub ReplaceSheet()
    Cells.Replace What:="未入力", Replacement:="0"
End Sub

Replaceメソッドの応用例と注意点

Replaceメソッドの応用例(完全一致のみ置換する)

下記コードでは、セル全体を対象にして「OK」のみ入力されているセルだけ「合格」に変わります。

Sub ReplaceExact()
    Cells.Replace What:="OK", Replacement:="合格", LookAt:=xlWhole
End Sub

完全一致の場合のみ置換され、「一部OK」のような部分一致では置換されません。

注意点:書式も置換対象になる場合がある

Replaceメソッドを使うと、書式設定(フォント色・太字など)も一緒に変わってしまうことがあります。

意図しない書式変更を防ぐため、SearchFormatReplaceFormatを適切に設定しましょう。

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

Replace関数とReplaceメソッドの違いや使う場面などは下記の表のようになります。

項目Replace関数Replaceメソッド
置換対象文字列変数セル・範囲(Rangeオブジェクト)
使用する場面コード内のデータ操作ワークシート上のセル編集
構文の違い関数として戻り値を得るメソッドとしてセルを直接編集

まとめると、

  • 文字列変数を置き換えたい → Replace関数
  • セルやシート内を置き換えたい → Replaceメソッド

を使うと覚えておけばOKです!

実務での活用例

データクリーニングの事例

  • 顧客名の「㈱」をすべて「株式会社」に統一
  • 商品リスト中の「(旧)」表記を一括削除
  • 住所データの「-」を「丁目」などの正式表記に変換

このように、Replace関数・Replaceメソッドは、手作業では大変な大量置換作業を自動化できるため、業務効率が飛躍的に向上します!

まとめ

Replace関数とReplaceメソッドは、いずれも文字列の置換に使える強力な機能です。
違いを理解し、場面に応じて使い分けることで、より効率的なVBAプログラムが書けるようになります。

ぜひこの記事を参考に、実務でもどんどん活用してみてください!

この記事を書いた人

めんどくさがりでズボラ。
某自動車メーカーで、VBAやRPAを用いた業務効率化を行っております。

目次