配列の勉強02
配列について(一つプログラムを書いて分かったこと) 2011/1/11
配列を使う方が処理が早い(Excelによる評価が入らない・メモリに乗っかったまま処理するから)という話を読んで
一つプログラムを作ってみた。その時に感じた注意点をいくつか。(処理速度ではVlookUpが最も早いらしい。)
配列というのは変数で宣言をすると、index0から始まるようになっているらしい。
しかし、セル範囲を配列に格納すると、0からではなく1からindexが始まるようになるという。
配列の要素数は、それがセル範囲から格納するなら自動的に決定されるようなのでいいが、
最下行や最右行のデータを取得して「Redim C(Lastrow)」とかやることもあり得る。
また、縦一列のセル範囲を配列変数に格納して「Debug.print C(1)」
とやるとエラーになった。
ネットの解説記事等を読むと「縦方向の配列は二次元配列としなければならない」とある。
従って、「Debug.print C(1、1)」や「Debug.print C(26,1)」とすべきだった。
二次元配列のindexについてはセルの指定と同じく(縦、横)のフォーマットになっている。
上記のように、配列から要素を取り出す際や、Redimで宣言をし直す際には注意が必要だ。
僕はわざわざRedimをする際に「D(1 to Lastrow,1)」とやってしまった。
これは、2列の二次元配列になる。(「D(1 to Lstrow,0 to 1)」ということなので。)
配列にセル範囲を格納したのだが、ワークシート上の一列をRange指定して配列をまるごと貼りつけても
値が貼り付けられない。 どうやら、横方向のIndex0の部分を貼りつけていたようだ。
実際に数値が格納されているのは、Index1の方であった。
範囲を広げて貼りつけてみたら狙ったところの隣の列に値が貼り付けられていて気がついた。
ここまで、いろいろとテストを繰り返して丸一日くらいかかってしまった。
処理の速度は確かに早い。
そして、人に分かり難いプログラムにはなっている。
これから活用をしていく予定。
ちなみに、ジャグ配列というのもあるらしい。配列の配列?