- 以下の二つの関数を紹介します。
- シンプルな末尾追加関数
- 任意の位置に挿入する関数
- エラー回避関数を組み合わせることで
要素数宣言でプログラムが止まることを気にしないで使えます。
こんにちはhokkyokunです。
実務ですぐに使える配列に要素を追加する関数です。
要素を末尾に追加するadd_elm関数と
任意の場所に追加するinsert_elm関数です。
注意点だけ気を付ければ要素数の宣言など面倒な処理を気にせず
気軽に配列に追加できるようになります。
注意点
関数をご紹介する前に注意点が二つあります。
ざっくりまとめると以下のような点に注意してください。
- エラー回避関数Is_correct_array関数を使って
エラーが生じる空の状態を回避する - 配列を格納する変数の宣言方法は
「Dim 配列名 as Variant」
配列は要素数の宣言をうまくやらないとすぐにエラーが生じます。
そこで
①エラー回避関数の使用と②配列宣言の指定によって
快適に配列を使えるようにしていただけると助かります。
エラー回避関数
配列で生じるエラーを回避する関数として
Is_correct_array関数を作りました。
これを用いると配列がエラー状態なのかどうか
ブール型(TrueかFalse)で返してくれます。

コードはこちらに乗せておきますので、
こちらも忘れずコピーしておいてください。
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
変数の宣言方法
配列を変数として格納していくと思いますが、
その宣言方法には注意が必要です。
以下の宣言方法で変数を宣言してください。
Dim 配列名 as Variant
(例) Dim arrs as Variant
arrsの後に()や(2)などをつけないのがポイント
配列は静的配列(宣言時に要素数を指定する配列)で
使用しないでください。
使用した場合は以下のようなエラーを起こします。

関数
関数はオリジナルです。
以下の二つを作りました。
add_Elm関数 末尾に追加するシンプルな関数
コード
まずはオーソドックスな配列の末尾に追加する関数です。
Function add_Elm(ByRef arrs As Variant, ByVal elm As Variant)
Dim num As Long
'Is_correct_array関数で配列がエラーを起こす空の状態かどうか判定
'エラーを起こす空の状態
If Not Is_correct_array(arrs) Then
'要素数が一つ=「0」で宣言
ReDim arrs(0)
arrs(0) = elm
'エラーを起こす空の状態ではない
Else
num = UBound(arrs)
ReDim Preserve arrs(num + 1)
arrs(num + 1) = elm
End If
End Function
配列のエラー回避コードはIs_correct_array関数は
こちらの記事にあります。
実際に使ってみます
では、実際に使ってみます。
Sub test_add_elm()
Dim arrs As Variant
arrs = Array(1, 2, 3, 4, 5, 6)
Call add_Elm(arrs, 7)
End Sub
こんな感じで、末尾に入れることができました。

insert_Elm関数 要素を任意の場所に追加する関数
コード
末尾に追加するだけでも実用的ですが、
場所を指定して入れたい場合や先頭に入れたい場合もあると思います。
そんな時はこちらを使ってみてください。
使い方に癖がありますので
少し説明させてください。
- 引数orderで挿入する位置を指定します。
- 例えば、1を指定した場合、左から「0,1」の「2番目」の位置に挿入します。
- 要素数のインデックスより大きい数値を入れた場合、最後尾に挿入されます。
[“a”,”b”,”c”]という3要素の配列で「4」を指定すると
[0,1,2,3,4]の「5番目」に挿入することになりますが、最後尾は「4番目」なので、4番目に挿入されます - 「-1」を指定すると問答無用で最後尾に挿入されます。
'配列に要素が何も入っていない状態 = 空と定義すると
'①エラーが生じる状態
'②エラーが生じない、Emptyが入った状態
'の二つがあります。
'②は基本的に静的配列にしていなければ生じないので無視
Function insert_Elm(ByRef arrs As Variant, ByVal elm As Variant, ByVal order As Long)
Dim i As Long
Dim arr As Variant
Dim results As Variant
Dim num As Long
'Is_correct_array関数で配列が
'①エラーを起こす空の状態かどうか判定
'エラーを起こす空の状態
If Not Is_correct_array(arrs) Then
'要素数が一つ=「0」で宣言
ReDim arrs(0)
arrs(0) = elm
'エラーを起こす空の状態ではない
Else
'orderが-1またはorderがarrsの最大インデックスより大きい場合
'末尾に入れる
num = UBound(arrs)
If order = -1 Or order > num Then
ReDim Preserve arrs(num + 1)
arrs(num + 1) = elm
'orderが-1、最大インデックスより大きい数値以外
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 If
End Function
実際に使ってみます
ちょっと癖がありますが、位置を任意で指定できますし、
エラーも発生しないように工夫しています。
また、「-1」を指定すると最後尾に挿入されるようにしています。
①先頭
Sub test_insert_elm1()
Dim arrs As Variant
arrs = Array(1, 2, 3, 4, 5, 6)
Call insert_Elm(arrs, 7, 0)
'結果 >> [7,1,2,3,4,5,6]
End Sub
②先頭<位置<最後尾
Sub test_insert_elm1()
Dim arrs As Variant
arrs = Array(1, 2, 3, 4, 5, 6)
Call insert_Elm(arrs, 7, 3)
'結果 >> [1,2,3,7,4,5,6]
End Sub
③最後尾
Sub test_insert_elm3()
Dim arrs, arrs2 As Variant
'-1を入れると問答無用で最後尾
arrs = Array(1, 2, 3, 4, 5, 6)
Call insert_Elm(arrs, 7, -1)
'結果 >> [1,2,3,4,5,6,7]
'最大インデックスより大きい数値の場合も最後尾
arrs2 = Array(1, 2, 3, 4, 5, 6)
Call insert_Elm(arrs2, 7, 10)
'結果 >> [1,2,3,4,5,6,7]
End Sub
まとめ
いかがでしたでしょうか
まとめてみます。
- 配列に要素を追加する関数
- シンプルに末尾に要素を追加する関数
add_Elm関数 - 任意の位置に挿入する関数
insert_Elm関数
配列を便利に使いやすくする関数を作っています。
VBAを学習する方法をまとめました。
ご参考いただければ幸いです。

