構文
引数 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では改行コードに次のような定数が定義されています。
テキストファイルなどで使われている、一般的な改行コードはvbCrLfですが、Excelのセル内改行では、vbLfが使われています。定数については、下記のページをご覧ください。
Windowsで一般的に使われる改行コードは、16進の「0D 0A」という2文字です。VBAでは、この改行コードにvbCrLfという定数を割り当てています。ただし、Excelのセル内でAlt+Enterキーを押したとき挿入される改行コードは、「0D 0A」ではなく「0A」という1文字です。VBAでは、この「0A」にvbLfという定数が割り当てられています。セル内の改行コードに関しては、下記のページで詳しく解説しています。