●Excel VBAでプログラミング その8
フォームを外部定義により動作させるように外部定義の位置を教えてあげるコマンドを追加します。
コマンド名をSetInit()と言う名前で作ります。動作は前回あげたような定義があったときにその位置(セルアドレス)を引数にこのコマンドを呼び出すものとします。
指定された位置からセルを右に1つずつスキャンするとどれだけのパラメータがあるかがわかり、1つ目がシート名、2つ目以降は表示用リストボックス内の幅をしていしていますのでそれらから初期化用のデータを取得します。
以上の部分をプログラムに置き換えると、long型のdmaxと言う変数にフィールドの個数、String型のwidsと言う変数に幅データを入れていくものとするとプログラムは以下のようになります。
ここで覚えておきたいのは、Rangeオブジェクトと呼ばれるものでシート上のセルにアクセスするために使います。ここでは2次配列のようにアクセスするためにcellsプロパティを参照するようにセットします。
上記のコードでは、定義の部分をスキャンしているに過ぎませんので、はじめに指定されているセルに書かれた(引数adrで指定されるセルにかかれたシート名の)シートをスキャンするコードを追加します。
ここで出てくるCurrentRegionプロパティは、表形式で書かれているセル郡の範囲を帰してくれるプロパティで、その範囲のRows.countでデータの総件数を知ることができます。
Asc()関数はアスキーコードと呼ばれる文字コード(数値)を返してくれる関数でエクセルで指定する横側の位置を指定するためにA~Zの範囲での文字を得るためにChr()関数を使っています。
以上のコードによりListBox1に表示するデータの範囲を割り出すことができているはずです。(未デバック)
ここまでのシートはこちらからダウンロードできます。