スポンサーリンク
はじめに:配列の概要
今回から、Excel VBAの「配列」について扱う。
配列とは何かと言うと、
とか宣言すれば、このarrという変数1つの中に1番目~100番目までの100個の要素を格納し扱えるという箱のようなものだ。
更に
といった形だと、Excelのシートでイメージする縦(列)が100個、横(行)が3個という2次元にわたって、要素を格納できる。
そして
などとすれば、配列arrの中に入れた多数のデータから、50番目と3番目の組み合わせ(Excelのシートで言うとC50セルというところ)といったように、任意のデータを呼び出すことも勿論できる。
配列は、無数のデータを扱うのには必須のテクニックだ。
VBAに限らずプログラミングをやるに当たっては、必ず押さえないといけない。
まず1次元配列から
配列の説明にあたって、まず1次元配列というものを扱う。
1次元があるからには当然、2次元、3次元・・・とあるわけだが、はっきり言って2次元までを扱えれば良い。
そして配列は、1次元とかよりも、2次元配列の使用割合がダントツで多い。
この2次元配列、先ほどExcelの行と列に例えて書いたが、正にExcelの行と列に一気に代入するという使い道ができるのがポイントだ。
VBAの配列は、他の言語の配列と比べどうも不便な面もあるのだが、そのExcelのセルに書き込む技がとにかく強力なのだ。
何が強力かって、とにかくVBAの処理を高速化できることだ。
配列を使わず直接セルに書き込む場合に比べ、場合によっては100倍以上もの高速化が図れる。
私が配列を使うケースの8割以上は、それに使う。
個人的には「配列を制する者がVBAを制する」くらいに考えている。
いきなり2次元配列から扱っても良いかも知れないが、配列のハの字もない状態からそれは流石に問題かと思うので、素直に1次元配列から取り上げることにする。
配列の変数宣言など
配列は英語でArrayというので、変数としては
○○Arr
といった名前の変数にすることが、私としては多い。
配列の中にどういうものを詰め込んでいるかという内容のことを「要素」という。
配列の要素数が最初から分かりきっている場合
配列の中に要素というものはたくさん詰め込めるわけだが、いくつ要素を入れるのかという数が最初から分かりきっている場合(そんなケースは少ないのだけど)
というように、変数宣言の時点でカッコ内に要素の数を書く。この、カッコ内に書かれた要素の数2のことを添字という。
あまり専門用語は使いたくないが、この添字については大事な用語なのでそうもいかない。
配列の添字はデフォルトでは0から始まる
さて、この
という書き方をした場合、特に何も設定していなければ、配列arrの中にある要素の数は2個ではなく3個だ。
この配列arrの中にある要素を具体的に列挙するには
arr(1)
arr(2)
と書いていけば良いのだが、
arr(0)
という要素もある。
配列の添字は、特に何も設定していなければ0から始まるというのが厄介なところだ。
「特に何も設定していなければ」と2度も書いたが、これはもちろん、特に設定することで添字を1から開始することができるというわけだ。
配列の添字を1開始にする
というか最初に言っておくが、配列の添字は1から開始する設定を、毎回必ず忘れないようにやっておこう。
添字が0開始なんて、コンピュータ的には処理しやすいのだろうが、人間にとっては分かりにくいだけだから、1開始にするべきだ。
とはいったものの、添字を1開始にする方法、実は結構難しい。
今回のケース「配列の要素数が最初から分かりきっている場合」においては割と簡単だけど、それ以外のケースでは一筋縄ではいかないことがある。
今回の場合は、添字を1から開始する方法としては
Toを使って、配列の添字が幾つから幾つまでなのか明示しているわけだ。
もちろん、添字が2始まりとかいう指定もできる。
こうすれば、添字が1から始まると明言することができ、もちろんarr(0)なんていう要素は、この配列arrの中には存在しなくなる。
添字を1始まりにするには、モジュールの先頭に「Option Base 1」と書くという方法も紹介されることがあるが、はっきり言って全くお勧めしないので詳説もしない。
なぜお勧めしないかって、この「Option Base 1」なんかやったところで通用しない配列の形式もあるからだ。
配列に値を格納してみる
では、要素数が3個の配列arrに「Excel」「VBA」「マクロ」という3要素を格納してみよう。
そしてそれらをExcelのアクティブシートのA1・A3・A5セルに書き込んでみよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Option Explicit Sub test() Dim arr(1 To 3) As Variant arr(1) = "Excel" arr(2) = "VBA" arr(3) = "マクロ" With ActiveSheet .Cells(1, 1).Value = arr(1) 'Excel .Cells(1, 3).Value = arr(2) 'VBA .Cells(1, 5).Value = arr(3) 'マクロ End With End Sub |
という感じになる。
こんなのが実務で何か役立つのかって、まあ役立つ場面を見つけるのは難しい。
そもそもこんな、最初で要素数が分かりきってるケースが、実務ではあまり無いしね。
一応、配列というものの説明の入り口として、しないといけないから仕方なくやっただけだ。
注意事項としては、例ではarrのデータ型をVariantで宣言しているが、これはStringなど他の型にしても、動作するにはする。
ただまあ、数値に文字列にとあれこれ格納してこその配列だし、Variant型にしておくのが無難だ。
次回の記事で述べるような、他の配列の類型では、自動的にVariant型しか受け付けなくなるしね。
配列の中身を確認しながらVBAをステップ実行してみる
Excel VBAのエディターであるVBE画面では、書いたマクロを一気に実行するならF5キーを押せば良い。
それに対しF8キーを押していけば、ソースコードを1行ずつステップ実行していくことができる。
つまり、長いソースコードにおいても、1行ずつ動かしてじっくり確認しながら進めることができるわけだが、それに当たっては「イミディエイトウィンドウ」や「ローカルウィンドウ」を有効活用していこう。
もしこれらが見当たらなければ、VBEの「表示」メニューの中にあるので、必ず表示させるようにしておこう。
さて、今回作成した「test」マクロのソースコードを再掲する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Option Explicit Sub test() Dim arr(1 To 3) As Variant arr(1) = "Excel" arr(2) = "VBA" arr(3) = "マクロ" With ActiveSheet .Cells(1, 1).Value = arr(1) 'Excel .Cells(1, 3).Value = arr(2) 'VBA .Cells(1, 5).Value = arr(3) 'マクロ End With End Sub |
これをF8キーでステップ実行していき(「With ActiveSheet」の辺りでいったん止めてみると良い)、「ローカルウィンドウ」を見ると、変数arrが載っている。
それの左側が「+」マークになっているはずなので、それをクリックし展開すれば、arrの中身を1つ1つ確認することができる。
配列は多数の要素を扱うもので、分からなくなったらこの方法で確認してみると良いだろう。
スポンサーリンク