0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

複数の一次元配列を連結して1つの一次元配列にする関数

Last updated at Posted at 2020-09-27

##はじめに

エクセルVBAには、配列を連結し1つの配列にする関数がありません。
ということで、今回、複数の一次元配列を連結し、1つの一次元配列にする関数を作成しました。

##コード

まずは結論から。
コードを記載します。関数名はmerge1DArrayとしました。
引数として、一次元配列の配列を受け取ります。


Function merge1DArray(arr() As Variant) As Variant
Dim mergedArray() As Variant
Dim i As Long, j As Long, index As Long: index = 0

For i = LBound(arr) To UBound(arr)

  If i = UBound(arr) Then
    ReDim Preserve mergedArray(index + UBound(arr(i)) - LBound(arr(i)))
  Else
    ReDim Preserve mergedArray(index + UBound(arr(i)) - LBound(arr(i)) + 1)
  End If

  For j = LBound(arr(i)) To UBound(arr(i))
    mergedArray(j + index) = arr(i)(j)
  Next j
  
  index = index + UBound(arr(i)) - LBound(arr(i)) + 1

Next i

merge1DArray = mergedArray

End Function


確かめてみます。

Sub test()

Dim arr1(3) As String
Dim arr2(1) As String
Dim arr3(2) As String
Dim arr(2) As Variant
Dim mergedArray() As Variant
Dim i As Integer

arr1(0) = "あいうえお"
arr1(1) = "かきくけこ"
arr1(2) = "さしすせそ"
arr1(3) = "たちつてと"

arr2(0) = "なにぬねの"
arr2(1) = "はひふへほ"

arr3(0) = "まみむめも"
arr3(1) = "やゆよ"
arr3(2) = "らりるれろ"


arr(0) = arr1
arr(1) = arr2
arr(2) = arr3


mergedArray = merge1DArray(arr)

For i = LBound(mergedArray) To UBound(mergedArray)
  MsgBox mergedArray(i)
Next i

End Sub


##解説

まず、動的な配列:mergedArray()を用意します。
この関数は、引数として受け取った配列の配列:arr()の最初のインデックスから最後のインデックスまでループを行い(カウンター変数i)、それぞれの要素(配列)をmergedArray()に格納していきます。

このために、Redim Preserveステートメントを使って、すでにmergedArray()に格納された要素は保持しながらarr(i)の要素数分だけmergedArrray()の要素数を確保します。
これが、If文を使った条件分岐になっているのは、mergedArray()の最初のインデックスが0から始まるため、実は要素数が1つ多い状態でループが進んでいってしまうのですが、ループの最後のiになったときに、
ReDim Preserve mergedArray(index + UBound(arr(i)) - LBound(arr(i)))
と「 + 1 」をなくすことでで、帳尻を合わせています。

実際にmergedArrayに要素を格納していく操作が、カウンター変数jを使ったループです。

indexにarr(i)の要素数を足して次のループに移ります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?