0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Replace関数の使い方と注意点

Replace関数は、文字列の中で検索文字列を置換文字列に置き換える関数です。

構文

Replace(文字列, 検索文字列, 置換文字列[, 開始位置[, 置換回数[, 比較方法]]])
  • 文字列 : 置換処理を行う文字列
  • 検索文字列 : 検索する文字列
  • 置換文字列 : 置換後の文字列
  • 開始位置 : 出力開始位置(省略時は1:先頭から)
  • 置換回数 : 置換回数(省略時は-1:全て)
  • 比較方法 : 比較方法(省略時は0)0:バイナリ、1:テキスト
  • 戻り値 : 置換後の文字列

一般的には開始位置と置換回数と比較方法を省略した形が良く使われます。

Replace( 文字列, 検索文字列, 置換文字列)

使用例

開始位置と置換回数と比較方法を省略した場合

こちらの例ではExcelという文字列のEAに置き換えています。

Sub Sample()
    Dim mystring1 As String
    mystring1 = "Abcd"
    Debug.Print "半角英字 : " & Replace(mystring1, "c", "e")

    Dim mystring2 As String
    mystring2 = "Abcd"
    Debug.Print "全角英字 : " & Replace(mystring2, "c", "e")

    Dim mystring3 As String
    mystring3 = "あいうえ"
    Debug.Print "ひらがな : " & Replace(mystring3, "う", "お")

    Dim mystring4 As String
    mystring4 = "亜伊宇江"
    Debug.Print "漢字 : " & Replace(mystring4, "宇", "御")

    Dim mystring5 As String
    mystring5 = "!?#/"
    Debug.Print "半角記号 : " & Replace(mystring5, "#", "@")

    Dim mystring6 As String
    mystring6 = "!?#/"
    Debug.Print "全角記号 : " & Replace(mystring6, "#", "@")

    Dim mystring7 As String
    mystring7 = "1234"
    Debug.Print "半角数字 : " & Replace(mystring7, "3", "5")
    
    Dim mystring8 As String
    mystring8 = "1234"
    Debug.Print "全角数字 : " & Replace(mystring8, "3", "5")

    Dim mystring9 As String
    mystring9 = "A b C"    ' Aとbの間に半角スペース、bとcの間に全角スペース
    Debug.Print "スペース : [" & Replace(mystring9, "b", "d") & "]"
End Sub

▶ 出力結果

半角英字 : Abed
全角英字 : Abed
ひらがな : あいおえ
漢字 : 亜伊御江
半角記号 : !?@/
全角記号 : !?@/
半角数字 : 1254
全角数字 : 1254
スペース : [A d C]

開始位置を指定する場合

こちらの例では"abc1abc2abc3abc4abc5という文字列のaAに置き換えています。
また開始位置に5を指定しています。

Sub Sample()
    Dim mystring As String
    mystring = "abc1abc2abc3abc4abc5"
    Debug.Print Replace(mystring, "a", "A", 5)
End Sub

▶ 出力結果

Abc2Abc3Abc4Abc5

開始位置が5のため先頭のabc1を含まず、以降の部分に対して置換が行われています。

置換回数を指定する場合

こちらの例ではaAに置き換えることに加え、置換回数に2を指定しています。

Sub Sample()
    Dim mystring As String
    mystring = "abc1abc2abc3abc4abc5"
    Debug.Print Replace(mystring, "a", "A", , 2)
End Sub

▶ 出力結果

Abc1Abc2abc3abc4abc5

置換回数が2のため1つ目と2つ目のaのみ置換が行われています。

比較方法を指定する場合

比較方法の指定には0,1または、それぞれを表す定数を使用します。

定数 内容
0 vbBinaryCompare バイナリ比較
1 vbTextCompare テキスト比較
省略 Option Compare の設定に従う

バイナリ比較とテキスト比較

バイナリ比較とテキスト比較の違いは主に英字の大文字と小文字を区別するかにあります。

比較対象 vbBinaryCompare vbTextCompare
英字の大文字と小文字 区別する 区別しない
ひらがなとカタカナ 区別する 区別する
全角と半角 区別する 区別する
Sub Sample()
    Dim mystring As String
    mystring = "abc1abc2abc3ABC4ABC5"
    Debug.Print "バイナリ : " & Replace(mystring, "a", "X", , , 0)
    Debug.Print "テキスト : " & Replace(mystring, "a", "X", , , 1)
End Sub

▶ 出力結果

バイナリ : Xbc1Xbc2Xbc3ABC4ABC5
テキスト : Xbc1Xbc2Xbc3XBC4XBC5

バイナリ比較が大文字小文字を区別するためaのみXと置換されるのに対し、
テキスト比較は大文字小文字を区別しないためaAXと置換されます。

比較方法を省略した場合

比較方法を省略した場合、Option Compareの設定に従います。(設定していない場合はバイナリ比較)
Option CompareにはTextまたはBinaryをしていします。

例えば以下の例ではOption Compareの設定をBinaryにしています。

Option Compare Binary

Sub Sample()
    Dim mystring As String
    mystring = "Excel"
    Debug.Print Replace(mystring, "e", "a")
End Sub

▶ 出力結果
Replaceではバイナリ比較が行われるため、
1文字目のEはヒットせず、4文字目のeがヒットします。

Excal

また、Option Compareを設定している場合でも、引数の入力により個別に比較方法を変えることもできます。

Option Compare Binary

Sub Sample()
    Dim mystring As String
    mystring = "Excel"
    
    Debug.Print "Replace1 : " & Replace(mystring, "e", "a")
    Debug.Print "Replace2 : " & Replace(mystring, "e", "a", , , 1)
End Sub

▶ 出力結果

Replace1 : Excal
Replace2 : axcal

⚠️注意

半角スペースと全角スペースは別物

Replace関数において半角スペースと全角スペースは別のものとして扱われます。

こちらの例では Excel (先頭に半角スペース、末尾に全角スペース)という文字列に対し、
半角スペースまたは全角スペースを空文字にして出力するようにしています。

Sub Sample()
    Dim mystring As String
    mystring = " Excel "
    Debug.Print "半角削除 : [" & Replace(mystring, " ", "") & "]"   '置換文字列に半角スペース
    Debug.Print "全角削除 : [" & Replace(mystring, " ", "") & "]"  '置換文字列に全角スペース
End Sub

▶ 出力結果

半角削除 : [Excel ]
全角削除 : [ Excel]

どちらも対象のスペースのみが空文字に置換されています。

戻り値は文字列(String)型

Replace関数の戻り値は文字列型です。
Sub Sample()
    Dim myinteger As Integer
    myinteger = 12345
    Debug.Print Replace(myinteger, "2", "6")
    Debug.Print TypeName(Replace(myinteger, "2", "6"))  ' Replace関数の戻り値の型を出力
End Sub

▶ 出力結果

16345
String

その他のVBA関数

【Excel VBA】VBAでよく使う関数一覧&基本の使い方

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?