- 配列同士を結合する関数を作成しました。
- 以下のようなイメージです。
[ a, b, c ] + [ d, e ] = [ a, b, c, d, e ] - 配列は何個でも対応可能です
(例)4つの配列を一つの配列に統合(マージ) - 空の配列が入っていても対応します。
こんにちは、hokkyokunです。
配列同士を結合する関数を作りました。
以下のようなイメージで結合します↓
このとき、一方の配列が空の場合でもエラー発生しません。
また、配列の数はいくらでも大丈夫です。
プログラミング代行いたします。
Python・VBAのコード対応です。
【VBA】
エクセルの自動処理全般
【Python】
スクレイピングによる、インターネット操作の自動化
デスクトップツール(データ解析等)
ワードプレスの自動化・効率化(自動更新、記事新規作成等の自動化)
ココナラで依頼を受けておりますので、お気軽にご相談ください。
ココナラの会員登録がまだの方↓
VBAを学習するには、動画プラットフォームUdemyがおすすめです。
Udemyの公式サイトはこちらです。
注意点
サブ関数
関数が長く、複雑化するのを防ぐために処理を分割しています。
- 配列が空かどうかの判断
- 配列に要素を追加する
コードは以下です。
必ず、モジュールに追加してから使用してください
Function isEmptyArray(ByVal arrs As Variant)
Dim a As Variant
'要素をとり出してエラーが出るかどうか
On Error GoTo err
a = arrs(0)
'エラーが生じたときエラー番号で9か13の場合はFalse
err:
If err.Number = 9 Or err.Number = 13 Then
isEmptyArray = True
Else
isEmptyArray = False
End If
End Function
Function addElm(ByRef arrs As Variant, ByVal elm As Variant, Optional order As Long = -1)
Dim num As Long
Dim arr As Variant
Dim i As Long
Dim a As Variant
'エラー判定
On Error GoTo err
a = arrs(0)
'エラーを起こす=配列が空→要素を一つ追加して終了
err:
If err.Number = 9 Or err.Number = 13 Then
ReDim arrs(0)
arrs(0) = elm
Exit Function
End If
'エラーを起こさない=配列が空ではない→orderの順番で入れる位置を決める
'orderが-1以下、もしくは、配列の要素数を超える数値の場合、末尾に追加
num = UBound(arrs)
If order <= -1 Or order > num Then
ReDim Preserve arrs(num + 1)
arrs(num + 1) = elm
'orderが0~要素数までの値の場合その位置に要素を入れる
Else
ReDim results(num + 1)
For Each arr In arrs
If i = order Then
results(i) = elm
i = i + 1
results(i) = arr
Else
results(i) = arr
End If
i = i + 1
Next
arrs = results
End If
End Function
コードの詳しい解説は以下をご確認ください
配列の宣言方法
配列を変数として格納していくと思いますが、
その宣言方法には注意が必要です。
Dim 配列名 as Variant
(例) Dim arrs as Variant
arrsの後に()や(2)などをつけないのがポイント
個人的には配列の宣言は以下一択です。
他の書き方は一切しません。
コード
Function mergeArray(ByVal arrs As Variant)
Dim arr As Variant
Dim elm As Variant
For Each arr In arrs
If Not isEmptyArray(arr) Then
For Each elm In arr
Call addElm(mergeArray, elm)
Next
End If
Next
End Function
引数「arrs」の構造について説明します。
例えば、
①[ リンゴ、バナナ、パイナップル ]
②[ トマト、キュウリ ]
③[ エビ、サンマ、サーモン ]
このような3つの配列を統合して一つの配列に格納したいとします。
この場合、3つの配列をまとめてさらに大きな配列とします。
[
[ リンゴ、バナナ、パイナップル ],
[ トマト、キュウリ ],
[ エビ、サンマ、サーモン ]
]
実際に使ってみます
三つの配列を結合
上記で説明したような「リンゴ、バナナ…」の3つの配列を使ってみます。
Sub testArray1()
Dim arrs1, arrs2, arrs3 As Variant
arrs1 = Array("リンゴ", "バナナ", "パイナップル")
arrs2 = Array("トマト", "キュウリ")
arrs3 = Array("エビ", "サンマ", "サーモン")
'配列のマージ
Dim arrsMerged As Variant
arrsMerged = mergeArray(Array(arrs1, arrs2, arrs3))
Debug.Print "============================"
Dim arr As Variant
For Each arr In arrsMerged
Debug.Print arr
Next
Debug.Print "============================" & vbCrLf
'以下のように出力されます。
'============================
'リンゴ
'バナナ
'パイナップル
'トマト
'キュウリ
'エビ
'サンマ
'サーモン
'============================
End Sub
空の配列が含まれている
例えば、同じような三つの配列を結合させるとして、一部の配列を初期化し、空の状態にしたとします。
それでも統合はエラーを吐かずにうまくいきます。
Sub testArray2()
Dim arrs1, arrs2, arrs3 As Variant
arrs1 = Array("リンゴ", "バナナ", "パイナップル")
arrs2 = Array("トマト", "キュウリ")
arrs3 = Array("エビ", "サンマ", "サーモン")
'arrs2を初期化
arrs2 = Array()
'配列のマージ
Dim arrsMerged As Variant
arrsMerged = mergeArray(Array(arrs1, arrs2, arrs3))
Debug.Print "============================"
Dim arr As Variant
For Each arr In arrsMerged
Debug.Print arr
Next
Debug.Print "============================" & vbCrLf
'以下のように出力されます。
'============================
'リンゴ
'バナナ
'パイナップル
'エビ
'サンマ
'サーモン
'============================
End Sub
まとめ
いかがでしょうか。
まとめてみます。
- 配列同士を結合するオリジナル関数を紹介
- 配列の数はいくらでも対応可能
- 一部の配列が空でも対応
- 関数はこちら
配列を便利に使いやすくする関数を作っています。
最後に、
ココナラでVBA、Pythonの作成代行を行っています。
よければ、↓からご依頼お待ちしております。
プログラミング代行いたします。
Python・VBAのコード対応です。
【VBA】
エクセルの自動処理全般
【Python】
スクレイピングによる、インターネット操作の自動化
デスクトップツール(データ解析等)
ワードプレスの自動化・効率化(自動更新、記事新規作成等の自動化)
ココナラで依頼を受けておりますので、お気軽にご相談ください。
ココナラの会員登録がまだの方↓
また、VBAを学習するなら動画での学習がおすすめです。
世界最大級の学習用動画プラットフォームUdemyにはVBAの動画がたくさんアップロードされています。よければ覗いてみてください。
ではでは。