2個の配列をマージする方法
スポンサーリンク
Excel VBA の標準関数では配列を結合する関数は用意されていません。その為、配列をマージするにはロジックを作成する必要があります。
Join と Split を使用する方法
Joinと Split を使用すると次の方法で配列をマージすることができます。
VBA(実行可能なサンプルコード) | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Sub test1() Dim names1 As Variant Dim names2 As Variant Dim names3 As Variant names1 = Array("太郎", "次郎", "三郎") names2 = Array("四郎", "五郎", "六郎") '配列の内容を全て文字列として結合した後、分割して一つの配列にする。 names3 = Split(Join(names1, vbCrLf) & vbCrLf & Join(names2, vbCrLf), vbCrLf) '中身の確認 Dim name As Variant For Each name In names3 Debug.Print name Next name End Sub |
この方法の場合、Join と Split の区切り文字として指定する文字(上記のコードの場合、 vbCrLf=改行コード)は、配列内に含むことができません。
上記コードの実行結果は次の通りです。
イミディエイトウインドウ | |
1 2 3 4 5 6 | 太郎 次郎 三郎 四郎 五郎 六郎 |
関数を自作する方法
次のサンプルコードでは、 mergeArray という関数を作成して配列のマージを行っています。
VBA(実行可能なサンプルコード) | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | Option Explicit Sub test2() Dim names1 As Variant Dim names2 As Variant Dim names3 As Variant names1 = Array("太郎", "次郎", "三郎") names2 = Array("四郎", "五郎", "六郎") names3 = mergeArray(names1, names2) '中身の確認 Dim name As Variant For Each name In names3 Debug.Print name Next name End Sub Function mergeArray(ary1 As Variant, ary2 As Variant) Dim newArray() Dim i As Integer Dim itemCounter As Integer itemCounter = 0 '1個目の配列の内容を新しい配列に移す。 For i = LBound(ary1) To UBound(ary1) ReDim Preserve newArray(itemCounter) newArray(itemCounter) = ary1(i) itemCounter = itemCounter + 1 Next i '2個目の配列の内容を新しい配列に移す。 For i = LBound(ary2) To UBound(ary2) ReDim Preserve newArray(itemCounter) newArray(itemCounter) = ary2(i) itemCounter = itemCounter + 1 Next i mergeArray = newArray End Function |
上記を実行するとイミディエイトウインドウに次の内容が出力されます。
イミディエイトウインドウ | |
1 2 3 4 5 6 | 太郎 次郎 三郎 四郎 五郎 六郎 |
スポンサーリンク
- 配列
- 配列のサイズを動的に変更する方法
- For Each で配列の全ての要素を処理する方法
- 2個の配列をマージする方法