- 配列同士を結合する関数です。
- エラー回避します。
一方の配列が空の状態でも処理が止まりません。
こんにちは、hokkyokunです。
配列同士を結合する関数を
紹介します。
コピペOKの関数を作りました。
このとき、一方の配列が空の場合でもエラー発生しません。
空の配列を処理する意味はあるの?
処理を自動化する場合、
時として配列が空になるかもしれません。
このときエラーでいちいち止まっていては仕事にならないので
極力エラー回避を考えておくことは重要です。
エラー回避関数はこちらにありますので、
良かったら見ていってください。

注意点
複数の関数に分けて処理している
個人的にはプログラムは小分けに関数化することで
自分もわかりやすく、エラーも回避しやすくなると考えています。
今回の配列を結合する関数を作るのに以下の関数を使用しました。
使用する側としては面倒だと思いますが、全てコピペしていただけると
エラーの起こしにくいプログラムになると思いますので、よろしくお願いします。
配列の宣言方法
配列を変数として格納していくと思いますが、
その宣言方法には注意が必要です。

Dim 配列名 as Variant
(例) Dim arrs as Variant
arrsの後に()や(2)などをつけないのがポイント
個人的には配列の宣言は以下一択です。
他の書き方は一切しません。
この書き方の場合はエラーが起きないはずです。
起きた場合はご連絡いただければ幸いです。
配列は一方の関数にすべて格納するイメージ
配列はすべての関数を一方の配列に格納させます。
(後述しますが、引数arrs1の方にすべて格納します)
新たに配列を生成するのではないので注意してください。
イメージ的にはPythonという言語のExtend関数のようなものを作りました。
関数
関数はオリジナルです。
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
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
Function add_Elm(ByRef arrs As Variant, ByVal elm As Variant)
Dim num As Long
'Is_correct_array関数で配列がエラーを起こす空の状態かどうか判定
'エラーを起こす空の状態
If Not Is_correct_array(arrs) Then
'要素数が一つ=「0」で宣言
ReDim arrs(0)
arrs(0) = elm
'エラーを起こす空の状態ではない
Else
num = UBound(arrs)
ReDim Preserve arrs(num + 1)
arrs(num + 1) = elm
End If
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を高コスパで、短期間で学ぶにはUdemyがおすすめです。
Udemyは良質の学習プラットフォームですが、
動画数が多すぎてどれを見ればよいか迷います。
おすすめの講師をまとめました。

VBAを短時間で習得するためには
何はともあれ質問、相談する環境が重要です。
侍エンジニアはVBAをオンラインで学習できます。
質問の回答に力を入れていますので、
短時間でサクッと習得するにはオンライン学習を検討してみてください。

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