二つの配列を結合する関数 の続き
昨日は、二つの配列を力業で結合するユーザー定義関数を作成してみた。
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
テスト結果は良好。昨日と同じなので、結果の内容は割愛する。
それにしても、行方向または列方向の指示は、頻繁でもないが偶に登場する。
これからは、迷わなくて済みそうです。
参考まで。