System.Collections.ArrayList

ArrayList

 Microsoft は .NET Framework とよばれるアプリケーション開発環境を提供 (Windows に標準搭載) していて、VBA でも .NET Framework のクラスの一部を利用することができます。その中の1つ、ArrayList は動的配列 (dynamic arrays) 機能を備えたクラスです。

 

要素の追加・削除

 VBA の動的配列に比べると、ArrayList は柔軟で直感的な操作が可能です。Redim で要素数を確定する必要はなく、要素を追加 (または削除) すると配列サイズは自動的に調整されます。

Sub ArrayList_add()

Dim var As Variant
Dim mydata As Object

'Arraylistクラスのインスタンスを生成
Set mydata = CreateObject("System.Collections.ArrayList")

'Addメソッドで要素を追加
With mydata
 .Add "こばと"
 .Add "真理子"
 .Add "涼音"
End With

'配列の中身を全て表示
For Each var In mydata
 Debug.Print var,
Next var

'イミディエイトウィンドウで改行
Debug.Print vbCrLf; vbCrLf;

'3番目の要素を削除
mydata.Removeat 2

'もう一度、配列の中身を全て表示
For Each var In mydata
 Debug.Print var,
Next var

End Sub

こばと 真理子 涼音
こばと 真理子

 Arraylist のインデックスの下限値は 0 です。
 Option Base の宣言は効きません。
 上のコードにあるように、3 番目の要素を削除する場合は

mydata.Removeat 2

と記述します。あるいは Removeメソッドを使って

mydata.Remove mydata(2)

と記述することもできます。あるいは要素の名前を使って削除することもできます。

mydata.Remove "涼音"

 Clearメソッドはすべての要素を削除します。
 以下のコードは、要素を追加した直後と、要素をすべて削除した直後に Debug.Print で配列の中身をすべて表示させようとしますが、2 回目の命令実行時には要素がすべてなくなっているので何も表示されません。

Sub ArrayList_clear()

Dim i As Long
Dim var As Variant
Dim mydata As Object

'Arraylistオブジェクトを生成
Set mydata = CreateObject("System.Collections.ArrayList")

'10,20,30を配列に格納
For i = 1 To 3
 mydata.Add 10 * i
Next i

'配列の中身を全て表示
For Each var In mydata
 Debug.Print var;
Next var

'すべての要素を削除
mydata.Clear

'もう一度、配列の中身を表示
For Each var In mydata
 Debug.Print var;
Next var

End Sub

10 20 30

 

要素の参照

 ArrayList の各要素は Itemメソッドを介して参照できます。あるいは、オブジェクトのインデックス番号から直接アクセスします。

Sub Arraylist_item()

Dim arr As Object

'Arraylistオブジェクトを生成
Set arr = CreateObject("System.Collections.ArrayList")

'要素を追加
With arr
 .Add "Kobato"
 .Add "Mariko"
 .Add "Suzune"
 .Add "Sayoko"
 .Add "Koharu"
End With

'Itemメソッドで1番目の要素を参照
Debug.Print arr.Item(0)

'インデックスで3番目の要素にアクセス
Debug.Print arr(2)

End Sub

Kobato
Suzune

 

要素数のカウント

 Countメソッドで配列の要素数を取得できます。

Sub ArrayList_count()

Dim arr As Object

'Arraylistオブジェクトを生成
Set arr = CreateObject("System.Collections.ArrayList")

'要素を追加
With arr
 .Add "Kobato"
 .Add "Mariko"
 .Add "Suzune"
End With

'要素数を表示
Debug.Print arr.Count

End Sub

3

 

要素を逆順に並び替える

 Reverseメソッドを使うと、要素を逆順に並び替えることできます。

Sub ArrayList_reverse()

Dim i As Long
Dim var As Variant
Dim arr As Object

'Arraylistオブジェクトを生成
Set arr = CreateObject("System.Collections.ArrayList")

'要素を追加
For i = 1 To 5
 arr.Add i
Next i

'配列の中身を表示
For Each var In arr
 Debug.Print var;
Next var

'要素を逆順に並び替える
arr.Reverse

'イミディエイトウィンドウで改行
Debug.Print vbCrLf; vbCrLf;

'配列の中身を再び表示
For Each var In arr
 Debug.Print var;
Next var

End Sub

1 2 3 4 5

5 4 3 2 1

 

配列のソート

 Sortメソッドは配列をソートします (昇順に並び替えます)。数字であれば小さい順に、アルファベットであれば、a, b, c, ... のように並べます。

Sub ArrayList_sort()

Dim var As Variant
Dim arr As Object

'Arraylistオブジェクトを生成
Set arr = CreateObject("System.Collections.ArrayList")

'要素を追加
With arr
 .Add "え"
 .Add "い"
 .Add "あ"
 .Add "お"
 .Add "う"
End With

'配列をソート(昇順に並び替え)
arr.Sort

'配列の中身を表示
For Each var In arr
 Debug.Print var;
Next var

End Sub

あいうえお

 

要素の挿入

 Insertメソッドを使って、好きな位置に要素を挿入できます。

Sub ArrayList_insert()

Dim var As Variant
Dim arr As Object

'Arraylistクラスのインスタンスを生成
Set arr = CreateObject("System.Collections.ArrayList")

'Addメソッドで要素を追加
With arr
 .Add "こばと"
 .Add "真理子"
 .Add "涼音"
End With

'インデックス1の位置に新しい要素を挿入
arr.Insert 1, "沙希"

'配列の中身を表示
For Each var In arr
 Debug.Print var,
Next var

End Sub

こばと 沙希 真理子 涼音

 

配列の連結

 AddRangeメソッドを使うと、配列の末尾に別の配列を連結させることができます。

'配列の連結

Sub ArrayList_addrange()

Dim i As Long
Dim var As Variant
Dim arr1 As Object, arr2 As Object

'Arraylistオブジェクトを生成
Set arr1 = CreateObject("System.Collections.ArrayList")
Set arr2 = CreateObject("System.Collections.ArrayList")

With arr1
 .Add "すきやき"
 .Add "とんかつ"
 .Add "オムライス"
End With

With arr2
 .Add "焼きそば"
 .Add "ラーメン"
 .Add "お好み焼き"
End With

'arr1とarr2を連結
arr1.AddRange arr2

'arr1の中身を全て表示
For Each var In arr1
 Debug.Print var,
Next var

End Sub

すきやき とんかつ オムライス
焼きそば ラーメン お好み焼き

 InsertRangeメソッドを使うと、インデックスを指定して別の配列を割り込ませることができます。

Sub arraylist_insertrange()

Dim var As Variant
Dim arr1 As Object
Dim arr2 As Object

'Arraylistクラスのインスタンスを生成
Set arr1 = CreateObject("System.Collections.ArrayList")
Set arr2 = CreateObject("System.Collections.ArrayList")

'arr1に要素を追加
With arr1
 .Add "りんご"
 .Add "オレンジ"
 .Add "バナナ"
End With

'arr2に要素を追加
With arr2
 .Add "メロン"
 .Add "ぶどう"
End With

'arr1のインデックス1の位置にarr2を挿入
arr1.InsertRange 1, arr2

'arr1の中身を表示
For Each var In arr1
 Debug.Print var,
Next var

End Sub

りんご メロン ぶどう オレンジ バナナ

 

配列の複製

 Cloneメソッドは配列の複製 (クローン) を生成します。

Sub ArrayList_clone()

Dim var As Variant
Dim arr1 As Object
Dim arr2 As Object

'Arraylistクラスのインスタンスを生成
Set arr1 = CreateObject("System.Collections.ArrayList")

'arr1に要素を追加
With arr1
 .Add "りんご"
 .Add "オレンジ"
 .Add "バナナ"
End With

'arr1の複製をarr2に格納
Set arr2 = arr1.Clone

'arr1の中身を表示
For Each var In arr2
 Debug.Print var,
Next var

End Sub

りんご オレンジ バナナ
スポンサードリンク
関連コンテンツ

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください