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環境であれば、素直にシステム関数を使用しましょう。
しかし例えシステム関数といえども単なる引数を取る手続きであり、このように同じ機能をユーザー定義関数として実装できることを覚えておきましょう。