Replace


構文

引数 expression には、置換の対象となる文字列を指定します。

引数 find には、検索する文字列を指定します。

引数 replace には、置き換える文字列を指定します。

引数 start は省略可能です。検索開始位置を指定します。

引数 count は省略可能です。置き換える文字列の個数を指定します。

引数 compare は省略可能です。文字列を比較するモードを指定します。

解説

任意の文字列で、特定の文字列を、指定した文字列に置き換えた文字列を返します。

引数compareには次の定数を指定できます。

数値 内容
-1 Option Compareの設定で比較します
0 バイナリモードで比較をします
1 テキストモードで比較します
2 Microsoft Accessでのみ使用できます

Replace関数は文字列を置換する関数ですが、任意の文字列を空欄に置換することで、結果的に特定の文字列を除去することができます。

サンプル1

次の例は、セル範囲A2:A10に入力されている名前のうち「土屋 直美」を「田中 直美」に置き換えます。

Sub Sample1()
    Dim i As Long
    For i = 2 To 10
        If Cells(i, 1) = "土屋 直美" Then
            Cells(i, 1) = Replace(Cells(i, 1), "土屋", "田中")
        End If
    Next i
End Sub

サンプル2

次の例は、セルB2に入力されている数式「=Sheet2!A1」の"Sheet2"を"Sheet3"に置き換えます。

Sub Sample2()
    Range("B2").Formula = Replace(Range("B2").Formula, "Sheet2", "Sheet3")
End Sub

所見

Replace関数は、ある文字列を、別の文字列に置き換えた結果を返す関数ですが、ある文字列を空欄("")に置き換えることで、任意の文字列をすべて消すことができます。私感ですが、Replace関数は、別の文字列に置き換えるより、何かを消すときによく使います。たとえば、次のコードは、文字列に含まれる半角スペースをすべて除去します。

Sub Sample3()
    Dim buf As String
    buf = "東京都 千代田区 丸の内 1-2-3"
    buf = Replace(buf, " ", "")
    MsgBox buf
End Sub

もし、半角と全角のスペースが混在していて、あるいは、どちらのスペースが含まれているかは分からないけど、とにかくすべての半角/全角スペースを除去したいのでしたら、次のようにReplace関数を2回使えばいいです。

Sub Sample4()
    Dim buf As String
    buf = "東京都 千代田区 丸の内 1-2-3"
    buf = Replace(Replace(buf, " ", ""), " ", "")
    MsgBox buf
End Sub

応用すれば、括弧を除去することもできますね。次のコードは、「田中亨(男)」を「田中亨→男」に変換します。

Sub Sample5()
    Dim buf As String
    buf = "田中亨(男)"
    buf = Replace(Replace(buf, "(", "→"), ")", "")
    MsgBox buf
End Sub

Replace関数では、画面に表示される文字列だけでなく、改行コードやタブコードなどの制御コードも置換できます。セル内で改行するには、改行したい位置でAlt+Enterキーを押しますが、この操作で挿入されるのは16進で0Aという改行コード(制御文字)です。セル内改行されているデータから、すべての改行コードを除去するには次のようにします。

Sub Sample6()
    Dim buf As String
    buf = Replace(ActiveCell, vbLf, "")
    MsgBox buf
End Sub

なお、VBAでは改行コードに次のような定数が定義されています。

  • 16進の0D → vbCr
  • 16進の0A → vbLf
  • 16進の0D + 0A → vbCrLf

テキストファイルなどで使われている、一般的な改行コードはvbCrLfですが、Excelのセル内改行では、vbLfが使われています。定数については、下記のページをご覧ください。

定数ってなに?

Windowsで一般的に使われる改行コードは、16進の「0D 0A」という2文字です。VBAでは、この改行コードにvbCrLfという定数を割り当てています。ただし、Excelのセル内でAlt+Enterキーを押したとき挿入される改行コードは、「0D 0A」ではなく「0A」という1文字です。VBAでは、この「0A」にvbLfという定数が割り当てられています。セル内の改行コードに関しては、下記のページで詳しく解説しています。

セル内の改行コードに注意