Access2000からは配列の要素を結合するためのJoin関数が実装されましたが、
Access97には同等の機能が用意されていません。
そこで今回はJoin関数と同等の機能を持つ関数を作成してみます。
● 準備 ●
新規標準モジュールを作成し、以下のプロシージャを記述して下さい。
● サンプル ●
'【引数説明】
'VarArray() 結合したい文字列型配列
'Separator 配列の要素を結合する際の区切り文字
' 省略した場合は「""」(長さ0の文字列)となる
'【戻値説明】
'「配列の要素 & 引数Separator & 配列の要素」という形の文字列
Public Function MyJoin( _
VarArray() As String, _
Optional ByVal Separator As String = "" _
) As String
On Error GoTo Func_Err:
'■■ 変数宣言 ■■
Dim iMin As Integer '配列の添え字の最小値
Dim iMax As Integer '配列の添え字の最大値
Dim strJoin As String '結合文字列
Dim i As Integer 'ループカウンタ
'■■ 添え字の取得 ■■
iMin = LBound(VarArray())
iMax = UBound(VarArray())
'■■ 配列の各要素の結合処理 ■■
'最初の1回はセパレータをつけない
strJoin = strJoin & VarArray(iMin)
For i = iMin + 1 To iMax
strJoin = strJoin & Separator & VarArray(i)
Next
MyJoin = strJoin
Func_Exit:
Exit Function
Func_Err:
MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description
GoTo Func_Exit:
End Function
'動作確認プロシージャ
Private Sub MyJoinTest()
Dim Arr(1 To 5) As String
Dim i As Integer
'配列に文字列を代入
For i = 1 To 5
Arr(i) = CStr(i)
Next
'ユーザー定義関数をコール
Debug.Print MyJoin(Arr, "-")
End Sub
● 動作確認 ●
動作確認用プロシージャ「MyJoinTest」を実行し、イミディエイトウィンド
ウに「1-2-3-4-5」と表示されていることを確認して下さい。
● 詳細 ●
サンプルでは引数で与えられた配列の添え字の上限と下限を、UBound関数・
LBount関数を使用して取得し、その差を元にループ処理を行い各要素を取り出
して結合しています。
UBound関数、LBound関数の使用方法と、配列の要素を変数で指定している部
分がポイントです。
また、このサンプルはAccess2000でも動作しますが、ネイティブなWin32環境
で実行されるReplaceシステム関数に比べて非常に動作が遅くなります。
Access2000環境であれば、素直にシステム関数を使用しましょう。
しかし例えシステム関数といえども単なる引数を取る手続きであり、このよ
うに同じ機能をユーザー定義関数として実装できることを覚えておきましょう。
|