作成日 2005/10/8
最終更新日 2010/1/24

エクセルVBAやVB6.0のRedimによる動的配列とCollectionによる動的配列の違い

 エクセルVBAやVB6.0で動的配列と言えば、大抵の人は"ReDim"と答えると思います。
 でも、Collectionも何かと便利です。
 ということで、ReDimとCollectionについての説明を簡単にした後、 ReDimによる動的配列とCollectionクラスによる動的配列を比較してみようと思います。

1.ReDimについて
2.Collectionについて
3.ReDimによる動的配列とCollectionクラスによる動的配列を比較
4.謝辞

1.ReDimについて

 メモリの再割り当を行う。

  1. まず、宣言する。
    例:Dim aaa() As Long
  2. メモリを割り当てる。
    例:ReDim aaa(1 to 4,0 to 15)
  3. Preserveを使って、データを失う事なくサイズを変更できる。(サイズ変更は最後の次元のみ)
    例:ReDim Preserve aaa(1 to 4,0 to 17)
このページのトップへ

2.Collectionについて

 Javaでいうところの、java.util.Vectorとjava.util.HashMapを1つにしたようなものかな。(かなり乱暴。)

  1. 宣言して、インスタンスを生成する。
    例1:Dim bbb As Collection
       Set bbb = New Collection
    例2:Dim bbb As New Collection
  2. Addメソッドを使用して要素を追加していく。
    例:Call bbb.Add("あいうえお")
  3. コレクションに追加した要素はItemメソッドを使用して取得する。
    例1:Debug.Print bbb.Item(1)
このページのトップへ

3.ReDimによる動的配列とCollectionクラスによる動的配列を比較



ReDimによる動的配列
Collectionによる動的配列
1
技術の取得に必要な時間は?
○短い
×長い(オブジェクト指向の勉強が必要)
2
要素の追加は?
×最後にしかできない。
(Preserveを使用)
○どこにでもできる。
(Addメソッドのbeforeかafter引数を指定)
3
特定の要素の削除は?
×できない。
(Preserveを使用し、
最後の要素を削除する事は可能)

○できる(Removeメソッドを使用)
4
要素の並び替えは?
×できない ×できない
5
特定の型のみしか要素に
追加できないようにすることは?
○できる
(宣言時に
Dim a() As Long
とすればLong型しか入れられなくなる)

×できない
(ユーザ定義型以外はなんでも入れられると思う。)
6
2 (多)次元配列は?
○できる
×できない
(コレクションか配列を要素にすればいいけど、
ソースが読みにくくなる。)

7
番号ではなく、
名前で要素を取得する事は?
×できない ○できる
(Addするときに、キー名を設定する)
8
要素数0の配列の作成は?
×できない

ReDim a(0 to -1)
を実行しようとするとエラーとなる)

○できる
(そもそも、インスタンス生成直後は要素数が0。
※要素数を取得するにはCountメソッドを使用する。

9
Function,Property Get
プロシージャの
返り値の型に指定する事は?
△できない(注:VBAのバージョンが6以上なら可能。)
(VBAのバージョンが5の場合、基本的に配列は返せない。
どうしても、返したければ、Variantとする。)

○できる

どちらがいいかは、場合によると思うので、どちらか一方を御薦めするということはしません。
しかし、多くの場合、Collectionの方がいいと思います。
このページのトップへ

4.謝辞

 Taka2さん。「Function,Property Get プロシージャの返り値の型に指定する事は?」の間違いの指摘ありがとうございます。

Prev Up Next  Top
このページのトップへ


このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。

Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。

このホームページの作成者はこれらの会社とはいっさい関係がありません。