ExcelVBAでデータ構造・動的配列・連想配列を利用する

みなさん、こんにちは。  今回はVBAで扱うデータ構造に関して取り上げます。 その中でもよく利用するけど、よく忘れる「ユーザー定義型」「動的配列」「連想配列」の使い方を説明します。

 

| VBAのユーザー定義型とは

C/C++などではひとまとまりのデータを表現する際に、構造体を利用したりしますが、 VBAでこれに該当するのがユーザー定義型です。 例えば、利用ユーザーの属性を管理するプログラムなどで扱うべきデータは、 ユーザーの名前と年齢などですが、こうした関連データをまとめて管理するのに用います。

ユーザー定義がたは「Type」キーワードを利用して定義します。 定義例を以下に記載します。

定義したユーザー定義型の利用例を以下に記載します。

 

| VBAで動的配列

定義時点ではデータの数など、配列の要素数が決定していない場合があります。 そうした場合は、動的に配列要素数を定義します。 動的配列の定義方法は「ReDim」キーワードを利用します。

上記で定義したユーザー定義型の動的配列を作成してみましょう。

まずは、空の配列を用意します。

その後、配列要素数が決定したら当該要素数でReDimによって配列を再定義します。 配列の要素数は「LBound」「UBound」で最小値、最大値が取得できます。 ループ処理などで必要な場合はこれらの値を参照します。

なお、上記のように再定義した場合、既にインデックス0にデータが 格納されていた場合は、データがクリアされてしまいます。 データを追加したいケースでは、既存のデータがクリアされるのは困りますね。

そのような場合は、次のように「Preserve」キーワードを付けて「ReDim」定義します。

上記のように「Preserve」を付けて「ReDim」定義すると、既存のデータはクリアされずに残ります。

なお、配列が空か否かを判定したい場合、次のような構文を利用することができます。 (Sgnで判定する方法は、配列が空であっても環境によっては0が返されない可能性もあるようなので使わない方が無難です)

 

| VBAで連想配列を利用する

VBAで連想配列(ディクショナリ)を利用したい場合は拡張機能を利用します。 「Scripting.Dictionary」を利用します。 CreateObject()を利用するか、参照設定をすると使えます。

上記のようにキーとバリューをセットで管理できるので、 データベース的にデータを利用することが非常に楽になります

 

今回はVBAでよく利用するデータ構造を紹介しました。 うまく利用するとプログラムがコンパクトでかつ扱いやすくなります。

どんどん使いこなしていきましょう♪

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です