HOME > 即効テクニック > AccessVBA > 日付・文字列操作・演算 > 配列の要素を結合して1つの文字列に結合する関数

即効テクニック

日付・文字列操作・演算

配列の要素を結合して1つの文字列に結合する関数

(Access 97)

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