配列についてさらに学ぼう
前回は配列について学習しました。配列とは変数の一つで、重箱の様に値を何個も重ねて格納出来る仕組みでしたね。
ただ、前回のサンプルプログラムでは、配列の利便性については深く説明は出来なかった為、今回はより配列を実践的に使えるようなサンプルプログラムを用意して解説しようと思います。
Option Explicit Dim ArrayVal() Dim i For i = 0 To 4 Redim Preserve ArrayVal(i) ArrayVal(i) = i + 1 & "つ目の要素" Next For i = LBound(ArrayVal) To UBound(ArrayVal) msgbox ArrayVal(i) Next
今回のサンプルプログラムですが、実行すると前回と同じようにメッセージボックスを5回表示します。ただ、配列を活用することで行数は減り、シンプルなプログラムになりました。
今回も行ごとに解説していきます。
2行目
Dim ArrayVal()
配列用の変数を宣言しています。ただし、前回のサンプルコードでは変数名の隣に括弧で括られた数字(添字)が入っていましたが、今回は括弧しかありません。これは記述ミスでしょうか?
いいえ、ミスではありません。実は配列用の変数の宣言方法は、予め要素数が決まっていない場合は添字無しでも宣言が出来ます。ただ、配列は必ず添字をセットしないと扱えないので、後から宣言をし直すことになります。
5行目~8行目
For i = 0 To 4 Redim Preserve ArrayVal(i) ArrayVal(i) = i + 1 & "つ目の要素" Next
5行目ではFor文でのループ処理を開始します。変数 i のカウンターは0から開始します。このカウンターは配列の添字としても使用します。
今回のループ文はカウンターが0から4まで繰り返すという指示にしてありますが、実際に業務で配列を活用する場合は、何らかのデータを数えて、その最大値を設定するようなイメージです。例えばCSVの取り込みをしてその行を配列に格納するならその最大行数。どこかのフォルダ内のファイルの一覧を取得してそのファイルを一件ずつ処理する場合はファイル数などの取得してループ回数の最大値に設定します。
6行目では、前述していた配列用の変数を再宣言しています。
Redim で再宣言をします。
Redime の後ろに Preserve と記述されていますが、これは「配列に入れた要素を残したままで」という意味の指示になります。Preserve を使わずに Redim だけした場合は、再宣言した時点で対象の変数の中身は初期化され空になります。今回の処理では再宣言の度に中身が空になっては困るので、Preserve の指示を入れて配列内に格納した要素を残して配列用変数を再宣言しています。
Preserve の後ろには配列用の変数名とカウンター変数の添字を指定しています。添字はループ処理でカウントアップされていきます。よって、ループ処理を繰り返す度に再宣言する配列の添字の値は大きくなり、配列のサイズを拡張していきます。
7行目ではループ処理のカウンターで使用している変数 i を使用して、配列に格納する文字列を作っています。 i + 1 と記述していますが、i は最初0が格納されており、1ずつカウントアップされていきますが、nつ目と表示させる場合に一つ目の値が0つ目と表示されるのはおかしいので、プラス1 した値を配列の要素として格納し、後述するメッセージボックスに表示させています。
10行目~12行目
For i = LBound(ArrayVal) To UBound(ArrayVal) msgbox ArrayVal(i) Next
10行目ではLBound と UBound という記述がありますが、これはVBScriptの組み込み関数です。
LBound は引数として配列用の変数を渡してあげることでその配列に格納されている最も小さい要素のインデックスを返します。インデックスという名称だと分かり辛いので、添字番号とでも読み替えることにします。また、UBound は逆に、引数で渡された配列に格納されている最も大きい添字番号を返します。LBound のL は Lower 、UBound のU は Upperと覚えてもらうと良いかと思います。
For文のカウンターの開始値と終了値の定義を10行目でした後に、11行目でメッセージボックス関数を呼び、引数として配列を渡しています。配列から要素の値を取り出す際の添字はカウンター変数としても使用している変数 i を指定します。そうすることでループ処理が繰り返される度にカウンター変数はカウントアップされて、配列に格納されている全ての要素を順番にメッセージボックス関数に渡すことが出来ます。
今回の解説は以上です。
配列はループ処理との相性がよく、大量のデータを処理するといった場合に大変重宝します。正直この辺りまで活用できるようになると、確実に初心者は卒業と言っても問題は無いかと思います。
是非、色々と活用してみてください。
ではでは、今回も読んで頂きありがとうございました。
↓次回の記事はこちら
↓前回の記事はこちら
↓Windows10環境で文字化けする場合はこちら
Windows10のメモ帳の既定の文字コードは、Windows10のバージョン1903から「UTF-8」になりました。
VBScriptはUTF-8に対応していない為、アルファベットは問題ないのですが、日本語については文字化けします。
その為、Windows10の場合はファイルを保存する場合に、文字コードを「ANSI」に変更して保存してください。