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