配列

【VBA】配列を結合する関数(コピペですぐ使える)

わかること
  • 配列同士を結合する関数を紹介します。
  • 別記事で作った要素を追加する関数(add_Elm関数)
    と配列がエラーを起こす空かどうかを判定する関数(Is_correct_array関数)
    を使用して簡単に結合させます。

短時間で習得するためには質問できる環境が必要です。
KENスクールはVBAコースがあり、個別指導で質問し放題です。

KENスクール[ピーシーキョウシツ]
無料体験レッスンあります!

こんにちは、hokkyokunです。

アイコン名を入力

配列同士を結合する関数を
紹介します。

コピペOKの関数を作りました。

注意点

関数をご紹介する前に注意点が二つあります。
ざっくりまとめると以下のような点に注意してください。

  • エラー回避関数Is_correct_array関数を使って
    エラーが生じる空の状態を回避する
  • 配列の宣言方法は
    「Dim 配列名 as Variant」

エラー回避関数

配列に要素が何も入っていない状態=空と定義すると

  1. エラーが生じる状態
  2. エラーが生じない、Emptyが入った状態

の二つの状態があります。

①のエラーが生じている状態の空はプログラムが止まってしまうので
特に注意が必要です。

これを回避する関数として
Is_correct_array関数を作りました。

これを用いると配列がエラー状態なのかどうか
ブール型(TrueかFalse)で返してくれます。

コードはこちらの記事にあります。

【VBA】配列が空かどうかを判定する関数とエラー回避する関数 わかること 配列が空である状態を判定するオリジナル関数をご紹介します。 配列が空の状態は2種類①エラーが発生する状態②エラーが...

コードはこちらです。
合わせてこちらもコピペしてください。
使い方は↑の記事をご確認ください。

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

②エラーが生じない、Emptyが入った状態は
基本的には静的配列(宣言時に要素数を指定する配列)で生じる状態なので

次の配列の宣言の方法を活用すれば回避できます。

配列の宣言の方法

配列を変数として格納していくと思いますが、
その宣言方法には注意が必要です。

配列は静的配列(宣言時に要素数を指定する配列)で
使用しないでください。

使用した場合は以下のようなエラーを起こします。

Dim 配列名 as Variant

(例) Dim arrs as Variant
arrsの後に()(2)などをつけないのがポイント

個人的には配列の宣言は以下一択です。
他の書き方は一切しません。

この書き方の場合はエラーが起きないはずです。
起きた場合はご連絡いただければ幸いです。

関数

関数はオリジナルです。

Extend関数 配列同士の結合

  • 関数名
    Extend( arrs1 , arrs2 )
  • 引数
    ① arrs1 : 配列1(データ型はVariant)
    ② arrs2 : 配列2(データ型はVariant)
  • 戻り値
    なし(配列1に要素がすべて結合されている)
  • Extend関数には過去に作成した
    オリジナル関数add_Elm関数を使用しています。(記事はこちら
  • 上記でも触れましたが、
    配列がエラーの生じる空かどうかを判定する
    Is_correct_array関数も使用しています(記事はこちら
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

実際に使ってみます

実際に動かしてみます。

配列+配列

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を短時間で習得するためには
何はともあれ質問、相談する環境が重要です。

侍エンジニアはVBAをオンラインで学習できます。

質問の回答に力を入れていますので、
短時間でサクッと習得するにはオンライン学習を検討してみてください。

リアルに学習したい場合は
KENスクールがお勧めです。

KENスクールもオンライン対応していますが、
KENスクールにはリアルな教室があり、対面で学習できる強みがあります。

VBAカリュキュラムがあるパソコン教室はあまりないので、
実際に出向いて学習する方はこちらを検討してみてください。

新宿、池袋、北千住、横浜、名古屋、梅田、札幌、福岡に校舎があります!

KENスクール[ピーシーキョウシツ]
無料体験レッスンあります!