- 配列同士を結合する関数を紹介します。
- 別記事で作った要素を追加する関数(add_Elm関数)
と配列がエラーを起こす空かどうかを判定する関数(Is_correct_array関数)
を使用して簡単に結合させます。
こんにちは、hokkyokunです。
配列同士を結合する関数を
紹介します。
コピペOKの関数を作りました。
注意点
関数をご紹介する前に注意点が二つあります。
ざっくりまとめると以下のような点に注意してください。
- エラー回避関数Is_correct_array関数を使って
エラーが生じる空の状態を回避する - 配列の宣言方法は
「Dim 配列名 as Variant」
エラー回避関数
配列に要素が何も入っていない状態=空と定義すると
- エラーが生じる状態
- エラーが生じない、Emptyが入った状態
の二つの状態があります。
①のエラーが生じている状態の空はプログラムが止まってしまうので
特に注意が必要です。
これを回避する関数として
Is_correct_array関数を作りました。
これを用いると配列がエラー状態なのかどうか
ブール型(TrueかFalse)で返してくれます。

コードはこちらです。
合わせてこちらもコピペしてください。
使い方は↑の記事をご確認ください。
Function Is_correct_array(ByVal arrs As Variant)
Dim a As Long
'なんでもいいが、エラーを生じさせる
On Error GoTo err
a = UBound(arrs)
'エラーが生じたときエラー番号で9か13の場合はFalse
err:
If err.Number = 9 Or err.Number = 13 Then
Is_correct_array = False
Else
Is_correct_array = True
End If
End Function
②エラーが生じない、Emptyが入った状態は
基本的には静的配列(宣言時に要素数を指定する配列)で生じる状態なので
次の配列の宣言の方法を活用すれば回避できます。
配列の宣言の方法
配列を変数として格納していくと思いますが、
その宣言方法には注意が必要です。

Dim 配列名 as Variant
(例) Dim arrs as Variant
arrsの後に()や(2)などをつけないのがポイント
個人的には配列の宣言は以下一択です。
他の書き方は一切しません。
この書き方の場合はエラーが起きないはずです。
起きた場合はご連絡いただければ幸いです。
関数
関数はオリジナルです。
Extend関数 配列同士の結合
Function Extend(ByRef arrs1 As Variant, ByVal arrs2 As Variant)
Dim arr As Variant
'arrs2がエラーを起こす空の場合処理をせずに終了
If Not Is_correct_array(arrs2) Then Exit Function
For Each arr In arrs2
Call add_Elm(arrs1, arr)
Next
End Function
実際に使ってみます
実際に動かしてみます。
配列+配列
Sub test_extend1()
Dim arrs, arrs2 As Variant
arrs = Array("a", "b", "c")
arrs2 = Array("d", "e", "f")
Call Extend(arrs, arrs2)
'中身を確認
Dim msg As String
Dim arr As Variant
For Each arr In arrs
msg = msg & arr & ","
Next
Debug.Print Left(msg, Len(msg) - 1)
'>>a,b,c,d,e,f
End Sub
一方が空の場合
配列の要素数がうまくできておらず、
このまま使うとエラーが生じる場合も対応しております。
Sub test_extend2()
Dim arrs, arrs2 As Variant
'=======================
'arrsが空
'=======================
arrs2 = Array("d", "e", "f")
Call Extend(arrs, arrs2)
'中身を確認
Dim msg As String
Dim arr As Variant
For Each arr In arrs
msg = msg & arr & ","
Next
Debug.Print Left(msg, Len(msg) - 1)
'>>d,e,f
'===========================
'arrs2が空
'===========================
arrs = Array("a", "b", "c")
arrs2 = Array()
Call Extend(arrs, arrs2)
'中身を確認
msg = ""
For Each arr In arrs
msg = msg & arr & ","
Next
Debug.Print Left(msg, Len(msg) - 1)
'>>a,b,c
End Sub
まとめ
いかがでしょうか。
まとめてみます。
- 配列と配列を結合するオリジナル関数を紹介
- 一方の配列が空でも対応可能
- Extend関数はこちら
配列に追加したり、削除したりを手軽に自由自在に扱うことで
プログラムの作成効率は全然異なります。
VBAの配列はかなり癖があるので
是非関数を使っていってください。
他にも配列記事を作成していますので、
良かった見てみてください。
VBAを短時間で習得するためには
何はともあれ質問、相談する環境が重要です。
侍エンジニアはVBAをオンラインで学習できます。
質問の回答に力を入れていますので、
短時間でサクッと習得するにはオンライン学習を検討してみてください。

リアルに学習したい場合は
KENスクールがお勧めです。
KENスクールもオンライン対応していますが、
KENスクールにはリアルな教室があり、対面で学習できる強みがあります。
VBAカリュキュラムがあるパソコン教室はあまりないので、
実際に出向いて学習する方はこちらを検討してみてください。
新宿、池袋、北千住、横浜、名古屋、梅田、札幌、福岡に校舎があります!