銀河鉄道

【VBA】一次元配列と一次元配列を結合する

サムネイル
[VBA]Merge1D Arrays
配列と配列を
結合したい

3つ目の配列を用意して、値を入れていく

実は、結合ではなく新配列の作成

' Concatenate two 1D arrays safely and return as Variant array
' 2つの一次元配列を安全に結合して返す
Public Function Merge1DArrays( _
	ByRef ary1 As Variant, _
	ByRef ary2 As Variant) As Variant

	Dim result() As Variant
	Dim size1 As Long, size2 As Long
	Dim i As Long
	
	' Nullチェック|Handle Null
	If IsEmpty(ary1) Then
		If IsEmpty(ary2) Then
			JoinOneDimAry = Array()
			Exit Function
		Else
			JoinOneDimAry = ary2
			Exit Function
		End If
	End If
	If IsEmpty(ary2) Then
		JoinOneDimAry = ary1
		Exit Function
	End If
	
	' サイズ算出|Compute sizes
	size1 = UBound(ary1) - LBound(ary1) + 1
	size2 = UBound(ary2) - LBound(ary2) + 1
	ReDim result(1 To size1 + size2)
	
	' コピー処理|Copy elements
	For i = 1 To size1
		result(i) = ary1(LBound(ary1) + i - 1)
	Next i
	For i = 1 To size2
		result(size1 + i) = ary2(LBound(ary2) + i - 1)
	Next i
	
	JoinOneDimAry = result
End Function

ループしてコピーしてる?

地道に値を入れていくの

やってること

  1. 新しい配列を用意する|Prepare a new array
     ReDim result(1 To size1 + size2) で結合後のサイズを確保する。
  2. 元の配列をコピーする|Copy the first array
     For i = 1 To size1: result(i) = ary1(i): Next
  3. 続けてもう一方もコピーする|Copy the second array
     For i = 1 To size2: result(size1 + i) = ary2(i)

イメージ図

ary1 = [A, B, C]
ary2 = [D, E]

result = [A, B, C, D, E]

Vocabulary

| Array Concatenation|配列結合 |
| Copy Elements|要素コピー |
| ReDim|再定義 |
| Loop Processing|ループ処理 |
| Safe Implementation|安全な実装 |
make a new array
and copy values into it.

実はPythonなら、arr + arr でできる

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧