当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【VBA】System.Collections.ArrayList

【VBA】ArrayList

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

要素の追加・削除

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

'VBA Arraylist Add sample_code

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_add の実行結果:
'こばと 真理子 涼音
'こばと 真理子

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

mydata.Removeat 2

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

mydata.Remove mydata(2)

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

mydata.Remove "涼音"

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

'VBA Arraylist Clear sample_code

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

'ArrayList_clear の実行結果:
'10 20 30

要素の参照

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

'VBA Arraylist Item sample_code

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

'Arraylist_item の実行結果:
'Kobato
'Suzune

要素数のカウント

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

'VBA Arraylist Count sample_code

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

'ArrayList_count の実行結果:
'3

要素を逆順に並び替える

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

'VBA Arraylist Reverse sample_code

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

'ArrayList_reverse の実行結果:
'1 2 3 4 5
'5 4 3 2 1

配列のソート

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

'VBA Arraylist Sort sample_code

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

'ArrayList_sort の実行結果:
'あいうえお

要素の挿入

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

'VBA Arraylist Insert sample_code

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

'ArrayList_insert() の実行結果:
'こばと 沙希 真理子 涼音

➡【VBA】動的配列とRedimステートメント

配列の連結

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

'VBA Arraylist Addrange sample_code

'配列の連結
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

'ArrayList_addrange の実行結果:
'すきやき とんかつ オムライス
'焼きそば ラーメン お好み焼き

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

'VBA Arraylist Insertrange sample_code

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

'arraylist_insertrange の実行結果:
'りんご メロン ぶどう オレンジ バナナ

配列の複製

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

'VBA Arraylist Clone sample_code

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

'ArrayList_clone の実行結果:
'りんご オレンジ バナナ

コメント

  1. あとりえこばと より:

    VBAのArrayListをAIが解説します

    [ChatGPT] VBA(Visual Basic for Applications)は、Microsoft Office製品(Excel、Word、Accessなど)のマクロ言語です。VBAでは、データの格納や操作に便利なデータ構造としてArrayListが使用されます。ArrayListは可変長のデータコレクションであり、異なるデータ型の要素を格納できます。以下に、VBAのArrayListに関する基本的な情報と操作方法を説明します。

    ArrayListの宣言と初期化:ArrayListを使用するには、まずArrayListオブジェクトを宣言して初期化する必要があります。次のように宣言します。

    Dim myList As Object
    Set myList = CreateObject("System.Collections.ArrayList")

    要素の追加:ArrayListに要素を追加するには、Addメソッドを使用します。要素は末尾に追加されます。例えば、数値や文字列を追加する場合は次のようにします。

    myList.Add 10
    myList.Add "Hello"

    要素の取得と変更:ArrayListの要素には、インデックスを指定してアクセスできます。インデックスは0から始まります。次の例では、要素の取得と変更を示します。

    Dim value As Variant
    value = myList(0) ' 最初の要素を取得
    myList(1) = "World" ' 2番目の要素を変更

    要素の削除:ArrayListから要素を削除するには、Removeメソッドを使用します。次の例では、インデックスを指定して要素を削除しています。

    myList.Remove 10 ' 値が10の要素を削除

     
    要素数の取得:ArrayListの要素数は、Countプロパティを使用して取得できます。

    Dim count As Integer
    count = myList.Count ' 要素数を取得

    ループ処理:ArrayListの要素をループ処理するには、For Each文を使用します。次の例では、すべての要素を順に表示しています。

    Dim item As Variant
    For Each item In myList
        Debug.Print item
    Next item

    以上が、VBAのArrayListの基本的な使用方法です。ArrayListは、要素の追加や削除が容易で、柔軟なデータ操作が可能なため、VBAプログラミングで非常に便利です。

タイトルとURLをコピーしました