【VBA入門】配列の初期化(ReDim、Preserve、Array、Erase)

配列って使ってますか?

配列は同じ型のデータを大量に扱う場合に一つのかたまりとして扱うことができるので便利ですよね。

この記事では、配列について

  • 固定長配列と可変長配列
  • 配列の宣言と定義
  • 配列を初期化する方法
  • 配列を解放(再初期化)する方法
  • 配列の要素数を変更する方法
  • 1次元から2次元配列に変更する場合

など基本的な内容から、応用的な使い方についても解説していきます。

今回は配列について、使い方をわかりやすく解説します。

固定長配列と可変長配列

配列では同じデータ型の変数をたくさん扱う場合に、一つのかたまりとして扱うことができます。

配列内のひとつひとつのデータを要素といいます。それぞれの要素にはインデックス番号(添字)を指定することでアクセスすることができます。

配列を宣言する際に、要素数と次元数が決まっている配列を固定長配列といいます。

これに対して、要素数と次元数が決まっていない配列を可変長配列動的配列といいます。

配列の宣言と定義

それでは配列を宣言、定義する方法についてみていきましょう。

固定長配列と可変長配列で宣言の方法が少々異なります。

固定長配列の場合

まずは、固定長配列を宣言、定義する方法について説明します。

固定長変数は配列名のあとに「()」(カッコ)を使って下記のように宣言します。

データ型名は要素のデータ型になります。

添字の下限値は下記のように省略して記述することもできます。

省略した場合の下限値は通常0(ゼロ)となります。

なお、固定長配列はこのあと説明するReDimステートメントを使って要素数や次元数を変更することはできませんのでご注意ください!

2次元以上の多次元配列を宣言する場合

2次元以上の多次元の配列を宣言する場合は、次元ごとに「,」(カンマ)で区切って「()」に並べます。

可変長配列の場合

可変長配列の場合は、宣言時には要素数や次元数は指定しません

処理中に要素数などを再設定します。

可変長配列の宣言と定義は、配列名のあとに「()」を記述し、「()」内には何も記述しません。

処理中に配列の要素数や次元数を変更したい場合、ReDimステートメントを使用します。

ReDimステートメントを使った配列の要素数や次元数を指定する方法は下記のとおりで、固定長配列の宣言と同じになります。

ReDimステートメントを使って配列の要素数などを変更した場合、元のデータはすべて消えてしまいますので注意してください!

また、データ型の変更が可能なのは可変長配列の宣言時にバリアント型で宣言した場合だけになります。データの値を保持したまま配列の要素数を変更したい場合はReDim Preserveステートメントを使用します。

ReDim Preserveステートメントについては後ほど解説します。

配列を初期化する方法

配列は宣言、定義のあとで要素にそれぞれの値を入れて初期化して使う場合が多いです。

配列の初期化の方法についてみていきましょう。

配列を初期化する方法には主に2つの方法があります。

Eraseステートメントを使う方法とArray関数を使う方法です。

Eraseを使って初期化する場合

Eraseステートメントの引数には初期化する配列名を指定します。

それぞれのデータ型によって初期値が違います。

  • 数値配列:0(ゼロ)
  • 文字列配列:長さ0(ゼロ)の文字列
  • オブジェクト配列:Nothing
  • バリアント配列:Empty

それぞれの初期値で全要素が設定されます。

それではサンプルコードで確認していきましょう。

実行結果:
arr_erase

このサンプルコードでは、Integer型の配列arr_intとString型の配列arr_strを宣言し、Eraseステートメントで初期化しています。

なお配列のそれぞれの要素の値は配列名のあとの「()」内にインデックス番号(添字)を指定すると参照することができます。

Arrayを使って初期化する場合

Eraseステートメントで初期化する場合は、すべての要素が決まった値での初期化でした。

それに対して、Array関数を使う場合は要素の値を別々に指定することができます。

ただし、可変長配列でデータ型はバリアント型に限ります。

サンプルコードで確認していきましょう。

実行結果:
arr_array

このサンプルコードでは、Variant型の配列arr_intとarr_strを宣言し、Array関数で初期化しています。

それぞれの要素の値を別々に設定できています。

配列を解放(再初期化)する方法

先ほど可変長配列はReDimステートメントを使って要素数などを再設定できると説明しました。

これを使って配列を再初期化することができます。

サンプルコードで確認していきましょう。

実行結果:
arr_redim

このサンプルコードでは、Variant型の配列をArray関数を使って初期化したあと、ReDimステートメントを使って再初期化しています。

配列の要素数を変更する方法

先ほどReDimステートメントを使ってデータの値を保持したまま配列の要素数を変更したい場合は、ReDim Preserveステートメントを使用すると述べました。

サンプルコードで確認していきましょう。

実行結果:
arr_redim_preserve

このサンプルコードでは、Variant型の配列をArray関数を使って初期化したあと、ReDim Preserveステートメントを使って要素の値を保持したまま配列の要素数を変更しています。

1次元から2次元配列に変更する場合

ReDimステートメントを使用すると、1次元配列から2次元配列へのように次元を変更することも可能です。

次元の変更前:

次元の変更後:

ただし、要素の値は保持されませんので注意しましょう。

まとめ

ここでは配列の初期化について説明しました。

固定長か可変長か、要素のデータ型がバリアント型かそうでないかによって、初期化や再初期化でできることとできないことが分かれますので、注意が必要です。

使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説