文字列の内容 Replace関数

Replace関数は文字列を置換する関数です。

標記を統一させたい時などに使用します。

Replace関数の構文

Replace(String, Find, Replace)

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

[]内は省略可能です。

Replace(String, Find, Replace, [ start, count, compare])

Replace(文字列, 検索する文字列, 置換する文字列, [ 置換する開始位置 , 置換する回数 , 比較方法 ])

Replace関数の使用例

・Replace関数内に文字列を直接設定

・文字列に検索する文字列が無い場合

・Replace関数内の文字列が空白の場合

・Replace関数内の検索する文字列が空白の場合

・Replace関数内の置換する文字列が空白の場合

・Replace関数で置換する開始位置を設定

・Replace関数で置換する回数を設定

・Replace関数で比較方法を設定

・文字列を変数に設定

・セルから文字列を取得してセルに設定

繰り返し処理(検索する文字列)

・繰り返し処理(文字列、検索する文字列)

・繰り返し処理(文字列、検索する文字列、置換する文字列)

の内容で説明していきます。

Replace関数内に文字列を直接設定

Sub Replace1()
    
    MsgBox Replace("acbcdcec", "c", "f")

End Sub

“c”が”f”に置換されました。

文字列に検索する文字列が無い場合

Sub Replace2()
    
    MsgBox Replace("acbcdcec", "k", "f")

End Sub

文字列内にkがないのでそのまま表示されます。

Replace関数内の文字列が空白の場合

Sub Replace3()
    
    MsgBox Replace("", "c", "f")

End Sub

文字列が空白なので表示されません。

Replace関数内の検索する文字列が空白の場合

Sub Replace4()
    
    MsgBox Replace("acbcdcec", "", "f")

End Sub

検索する文字列がないためそのまま表示されます。

Replace関数内の置換する文字列が空白の場合

Sub Replace5()
    
    MsgBox Replace("acbcdcec", "c", "")

End Sub

置換する文字を空白に設定しているため”c”が空白になり”abde”が表示されます。

Replace関数で置換する開始位置を設定

Sub Replace6()
    
    MsgBox Replace("acbcdcec", "c", "f", 2)

End Sub

開始位置を2文字目に設定したため先頭の”a”が表示されません。

開始位置を省略した場合は先頭から表示されます。

Replace関数で置換する回数を設定

Sub Replace8()
    
    MsgBox Replace("acbcdcec", "c", "f", , 3)

End Sub

置換する回数を3回に設定したため、末尾の”c”が4回目になるので”c”が置換されません。

置換する回数を設定しない場合は、文字列のすべての候補を置換します。

Replace関数で比較方法を設定

Sub Replace9()
    
    MsgBox Replace("cCcC", "c", "f", , , 0)

End Sub

比較方法を0に設定した場合、先頭の”c”だけが”f”に置換されました。

Sub Replace10()
    
    MsgBox Replace("cCcC", "c", "f", , , 1)

End Sub

比較方法を1に設定した場合、すべて”f”に置換されました。

比較方法が0の場合は大小半角全角文字を判定します。

比較方法が1の場合は大小半角全角文字を判定しません。

比較方法を省略した場合は0が設定されます。

Sub Replace11()
    
    MsgBox Replace("cCcC", "c", "f", , , vbBinaryCompare)

End Sub
Sub Replace12()
    
    MsgBox Replace("cCcC", "c", "f", , , vbTextCompare)

End Sub

比較方法の設定が0と1ではなく、vbBinaryCompareとvbTextCompareの記載も可能です。

問題1

以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。

Sub Replace13()
    
    MsgBox Replace("acbcdcecgc", "c", "f", 3, 3)

End Sub

問題2

以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。

Sub Replace14()
    
    MsgBox Replace("acbcCcCdce", "c", "f", 2, 3, 1)

End Sub

問題1の答え

Replace(“acbcdce”, “c”, “f”, 2, 3)

開始位置が3、置換回数が3のため、先頭の”ac”が表示されず、末尾の”c”が4回目のため置換されていません。

問題2の答え

Replace(“acbcCcCdce”, “c”, “f”, 2, 3, 1)

開始位置が2、置換する回数が3、比較方法が1のため、先頭の”a”が表示されず、置換する回数が3回なので大文字の”C”まで”f”に置換されます。

文字列を変数に設定

Sub Replace15()
    Dim str, find, rep As String
    str = "あいうえお"
    find = "い"
    rep = "か"
    
    MsgBox Replace(str, find, rep)

End Sub

“い”が”か”に置換されています。

セルから文字列を取得してセルに設定

Sub Replace16()
    Dim str, find, rep As String
    str = Cells(2, 2)
    find = Cells(2, 3)
    rep = Cells(2, 4)
    
    Cells(2, 5) = Replace(str, find, rep)

End Sub

“い”が”か”に置換されました。

繰り返し処理(検索する文字列)

Sub Replace17()
    Dim str, rep As String
    Dim find() As String
    Dim i, retuNum As Integer
    str = Cells(2, 2)
    rep = Cells(2, 4)
    '検索する文字列の列番号を設定します
    retuNum = 3
    '検索する文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    i = 1
    '文字列の置換をリスト分繰り返します
    For Each Var In find
        str = Replace(str, find(i - 1), rep)
        i = i + 1
    Next
    
    Cells(2, 5) = str

End Sub

今回はFunctionを使用しています。

Functionの内容は検索のリストを作成して返却しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

複数の記号がすべて”-“に変換されました。

繰り返し処理(文字列、検索する文字列)

Sub Replace18()
    Dim rep As String
    Dim str() As String
    Dim find() As String
    Dim i, j, retuNum As Integer
    
    rep = Cells(2, 4)
    
    '文字列の列番号を設定します
    retuNum = 2
    '検索する文字列のリストを設定します
    str() = リストの設定(retuNum)
    
    '検索する文字列の列番号を設定します
    retuNum = 3
    '検索する文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    i = 1
    '文字列をリスト分繰り返します
    For Each Var In str
        j = 1
        '文字列の置換をリスト分繰り返します
        For Each Var2 In find
            str(i - 1) = Replace(str(i - 1), find(j - 1), rep)
            j = j + 1
        Next
        Cells(i + 1, 5) = str(i - 1)
        i = i + 1
    Next
    
End Sub

Functionは文字列のリストと検索のリストの内容を返却しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

置換する文字列が1行毎に置換されました。

繰り返し処理(文字列、検索する文字列、置換する文字列)

検索文字と置換文字は#→a、%→b、$→c、!→d、”→e、&→fという内容で置換します。

Sub Replace19()
    Dim str() As String
    Dim find() As String
    Dim rep() As String
    Dim i, j, retuNum As Integer
    
    '文字列の列番号を設定します
    retuNum = 2
    '検索する文字列のリストを設定します
    str() = リストの設定(retuNum)
    
    '検索する文字列の列番号を設定します
    retuNum = 3
    '検索する文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    '置換する文字列の列番号を設定します
    retuNum = 4
    '置換する文字列のリストを設定します
    rep() = リストの設定(retuNum)
    
    i = 1
    '文字列をリスト分繰り返します
    For Each Var In str
        j = 1
        '文字列の置換をリスト分繰り返します
        For Each Var2 In find
            str(i - 1) = Replace(str(i - 1), find(j - 1), rep(j - 1))
            j = j + 1
        Next
        Cells(i + 1, 5) = str(i - 1)
        i = i + 1
    Next
    
End Sub

Functionは文字列のリスト、検索のリストと置換のリストの内容を返却しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

それぞれ対応している文字が置換されました。

str(i – 1) = Replace(str(i – 1), find(j – 1), rep(j – 1))を

str(i – 1) = Replace(str(i – 1), find(j – 1), rep(j – 1), , , 1)に変更すれば大小全角半角を判定せずに置換されます。

今回はReplace関数について記載させて頂きました。

少しでも皆様の参考になれば幸いです。

Published by

不明 のアバター

yuuya

 現在フリーランスとして仕事を行っております。 新卒でIT企業に入社して、某ECサイトの開発、某銀行の滞納者管理システムの開発、某携帯キャリアのアクセス位置制御システムの開発などの色々なシステム開発に携わって参りました。 体調を崩して他業種に転職をしましたがIT技術を生かし、業務の効率化を提案して2時間かかる作業を2分で終らせられる様に作業の自動化などを行ってきました。  私は働きすぎて体を壊したので私の知識で、少しでも皆様の帰宅時間を速める事が出来るなら幸いです。

コメントを残す