HOME > 即効テクニック > AccessVBA > データ操作 > 特定の文字列内の文字を置きかえる関数

即効テクニック

データ操作

特定の文字列内の文字を置きかえる関数

(Access 97)
Access2000からは文字列中の文字を置きかえるためのReplace関数が実装されましたが、Access97には同等の機能が用意されていません。
そこで今回はReplace関数と同等の機能を持つ関数を作成してみます。

●準備●
新規標準モジュールを作成し、以下のプロシージャを記述して下さい。
●サンプル●
'【引数説明】
'Var        置き換え元の文字列
'strOld     置き換え前の文字列
'strNew     置き換え後の文字列
'【戻り値説明】
'置き換えが完了した文字列
Public Function MyReplace(Var As String, _
                          strOld As String, _
                          Optional strNew As String = "" _
                         ) As String

    Dim intVarlength As Integer     '引数Varの文字列長
    Dim strBuff      As String      '文字列バッファ
    Dim strResult    As String      '置き換え後文字列
    Dim i            As Integer     'ループカウンタ

    On Error GoTo Func_Err:

    '引数の文字列長の取得
    intVarlength = Len(Var)

    '引数文字列を1文字ずつ処理するループ
    For i = 1 To intVarlength
        strBuff = Mid(Var, i, 1)

        '置き換えの判断
        If strBuff = strOld Then
            strResult = strResult & strNew
        Else
            strResult = strResult & strBuff
        End If
    Next

    '戻り値の設定
    MyReplace = strResult

Func_Exit:
    Exit Function

Func_Err:
    MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description
    GoTo Func_Exit:

End Function

'動作確認プロシージャ
Private Sub MyReplaceTest()
    Debug.Print MyReplace("1234567890", "4", "X")
End Sub
●動作確認●
動作確認用プロシージャ「MyReplaceTest」を実行し、イミディエイトウィンドウに「123X567890」と表示されていることを確認して下さい。

●詳細●
サンプルではMid関数で引数Varの文字を1文字ずつ取り出し、引数strOldと比べて置き換えを実行しています。
また、このサンプルはAccess2000でも動作しますが、ネイティブなWin32環境で実行されるReplaceシステム関数に比べて非常に動作が遅くなります。Access2000環境であれば、素直にシステム関数を使用しましょう。
しかし例えシステム関数といえども単なる引数を取る手続きであり、このように同じ機能をユーザー定義関数として実装できることを覚えておきましょう。