二つの配列を結合する関数 の続き

昨日は、二つの配列を力業で結合するユーザー定義関数を作成してみた。
infoment.hatenablog.com
すると、ExcelVBAerさんから、以下のアドバイスをいただいた。
(いつも、ありがとうございます)。

Enum JoinDirection みたいに、
縦、横の指定をさせる場合に、
自分は xlRowCol を使って、
xlRow(縦方向) or xlColumn(列方向)
を選ばせるようにしてるのですが、
いかがでしょうか?!

正直、最初は既存のもので賄いたいと「Holizontal」などで検索していたのだが、良いものが見つからずモヤモヤしていた。早速、真似させてもらおう。

まず、引数の設定を次のように変更する。
変更前:

join_direction As JoinDirection = jdHolizontal

変更後:

join_direction As XlRowCol = xlColumn

これに伴い、自前のEnumが不要となる。

不要箇所:

Enum JoinDirection
    jdHolizontal
    jdVertical
End Enum

後は、これに伴う変更箇所を修正するだけ。

'[用 途]
'   二つの配列を結合する

'[引 数]
'   arr_1 As Variant 一つ目の配列
'   arr_2 As Vairant 二つ目の配列
'   join_direction    結合方向

'[戻り値]
'   arr_1 ⇒ arr_2 の順に結合した配列
'   ※インデックスは全て1始まりとする。

Public Function JoinArray(arr_1 As Variant, _
                          arr_2 As Variant, _
                 Optional join_direction As XlRowCol = xlColumn) As Variant

    On Error GoTo er1:

    Application.ScreenUpdating = False
    Dim Sh(1) As Worksheet
    Set Sh(0) = ActiveSheet

        Sheets.Add After:=Sheets(Sheets.Count)

    Set Sh(1) = ActiveSheet

        PasteArray Sh(1).Range("A1"), arr_1

    Dim PasteTarget As Range
        Select Case join_direction
            Case xlColumn
                Set PasteTarget = Sh(1).Cells(1, Sh(1).UsedRange.Columns.Count + 1)
            Case xlRows
                Set PasteTarget = Sh(1).Cells(Sh(1).UsedRange.Rows.Count + 1, 1)
        End Select

        PasteArray PasteTarget, arr_2

        JoinArray = Sh(1).UsedRange

    Application.DisplayAlerts = False
        Sh(1).Delete
    Application.DisplayAlerts = True
        Sh(0).Select

    Application.ScreenUpdating = True
    Exit Function

er1:
    Application.ScreenUpdating = True

End Function

テスト結果は良好。昨日と同じなので、結果の内容は割愛する。
それにしても、行方向または列方向の指示は、頻繁でもないが偶に登場する。

これからは、迷わなくて済みそうです。

参考まで。