image

コレクションは、配列と同じように(ただし異なる)オブジェクトを格納するデータ型です。基本的なVBAコードを作成するときは、ワークブック、ワークシート、範囲などを使用している必要があります。これらはすべてコレクションです。この記事では、VBAコレクションについて学習します。

VBAのコレクションとは何ですか?

コレクションは、配列と同じように同様のタイプのオブジェクトを格納するデータ型です。ただし、配列とは異なり、サイズは要件に応じて動的に増減できます。

コレクションからアイテムを追加、検索、フェッチ、および削除できます。

配列とは異なり、コレクション内のアイテムの値を変更することはできません。必要に応じて、コレクションのアイテムとして配列を使用します。

コレクションには、4つのプロパティまたはメソッドが関連付けられています。

Collection.Add

Collection.Item

Collection.Count

Collection.Remove

この記事では、これらのプロパティの使用法について説明します。

VBAでコレクションを作成する方法は?

コレクションはオブジェクトであるため、コレクションを宣言して初期化する必要があります。 VBAの他のオブジェクトと同様に、VBAでコレクションを作成する方法は2つあります。

1。インスタント作成

Dim items as new Collection

上記のメソッドでは、オブジェクトは即座に作成されます。要件に合わせてこのコレクションの使用をすぐに開始できます。

image

2。作成の遅延

Dim items as Collection

Set items = New Collection

このメソッドでは、最初にコレクションの参照を作成し、必要に応じてコレクションオブジェクトで初期化します。この方法を使用すると、いくつかの基準に基づいてコレクションを作成することを選択できます。

image

コレクションへのアイテムの追加(Collection.Add)

Addメソッドを使用して、コレクションに新しいアイテムを追加します。

items.Add "Apples"

上記のコードは、コレクションに文字列「Apples」を追加します。

items.Add 1.4

上記のコードは、コレクションの最後にdouble1.4を追加します。

image

これらのアイテムのキーを定義することもできます。これらのキーを使用して、コレクション内のアイテムにアクセスできます。

image

既存のアイテムの前または後にコレクションにアイテムを挿入する

Addメソッドは、コレクションの最後に新しいアイテムを追加します。 addメソッドには4つのパラメーターがあります。

Add(item,[Key],[Before],[After])

最初の引数が必要です。これは、コレクションに追加するオブジェクトまたはオブジェクトです。残りの引数はオプションです。このセクションでは、これらの引数の使用法について説明します。

特定のインデックス/キーの前または後にアイテムを追加する場合は、AddメソッドのBeforeパラメーターとAfterパラメーターを使用します。

items.Add True, "b", "cnst"

'Or

items.Add True, Before:="cnst"

どちらの行も、VBAコレクションアイテムのキー「cnst」の前にブール値を挿入します。

特定のインデックス/アイテム/キーの後にアイテムを挿入するには、AddメソッドのAfterパラメーターを使用します。

'inserting "Mango" with key "m" after key "cnst"

items.Add "Mango", Key:="m", after:="b"

上記の行では、キー「b」の後にキー「m」が付いた「Mango」が挿入されます。

image

注:*アイテムのキーは一意である必要があります。コレクションにすでに存在するキーは受け入れられません。 VBAは、「キーは既にこのコレクションの要素に関連付けられています」というエラーを返します。

image

これを有利に使用して、コレクションから一意のリストを取得できます。

コレクションのアイテムへのアクセス(Collection.Item)

コレクションのアイテムにアクセスするには、2つの方法があります。 。 CollectionName( “インデックス/キー”)

。 CollectionName.Item( “index / key”)

たとえば、インデックス1のコレクションアイテム*のメンバーとキー「apl」にアクセスするには、以下のVBAコードのいずれかを使用できます。

Debug.Print items.Item(1)

--

Debug.Print items(1)

--

Debug.Print items.Item("apl")

--

Debug.Print items("apl")

image

コレクション内のアイテムの数を取得する方法は? (Collection.Count)

コレクション内のオブジェクトまたはアイテムの総数を取得するには、コレクションの.Count関数を使用します。 .Countメソッドは、コレクション内のアイテムの総数を返します。

items.Count

上記の行は、コレクションに含まれるオブジェクトの数を示しています。

コレクションのすべてのアイテムにアクセスするにはどうすればよいですか?

VBAのコレクションのすべてのアイテムにアクセスする唯一の方法はループです。

コレクションの各アイテムを繰り返し処理して、それらにアクセスします。そのために、forループを使用します。 for-eachループは、コレクションオブジェクトにアクセスするための最も高速でクリーンな方法と見なされています。

VBAのコレクションをループする

VBAでコレクションをループする方法はいくつかあります。コレクションを反復処理するために、各ループに最もエレガントなものを使用します。

コレクションの各アイテムをループしすぎると、このVBAコード行を使用するだけです。

For Each itm In items

Debug.Print itm

Next itm

image

コレクションからのアイテムの削除(Collection.Remove)

vbaコレクションからアイテムを削除するには、Removeメソッドを使用できます。 removeメソッドは1つの引数を取ります。アイテムのインデックスまたはキー(使用可能な場合)にすることができます。

items.Remove (1) 'using index

--

items.Remove 1

--

items.Remove ("apl") 'using key

--

items.Remove "apl"

VBAでコレクションを削除する

ええと、vbaでコレクションを削除することはできません。ただし、新しいコレクションとして再度設定することで、そのコレクションのすべてのアイテムを削除できます。

Set items = New Collection

このコード行は、アイテムのアドレスに新しいコレクションを作成します。

したがって、コレクションは空になります。

image

VBAでの配列とコレクション

  1. Array size is predefined. The size of array can not be changed

normally.

  1. Array’s can hold only same type of data and the type must be declared

first.

  1. Indexing in array starts from 0

  2. Array members does not have any associated key.

  3. Arrays are mutable. You can change the values of its members.

  1. Collection’s size changes as items are added or removed.

  2. A collection can hold any number of data type. As you have seen in the

above examples.

  1. Indexing in VBA Collection starts from 1.

  2. Collection members can have keys associated with.

  3. Collections are immutable. You cannot change values of its member

directly.

そうそう、これがコレクションの基本です。オフィスツールでのVBAコレクションには多くの利点と用途があります。それらを一緒に探索します。それまで、コレクションやExcel / VBAに関連するものについて質問がある場合は、以下のコメントセクションに記入してください。