|
▼T-k さん:
ぼくがこの手の問題をするなら、いつもこうします。
<シート1>
A列 B列 C列 D列 E列
1 先頭行 5/15 5/16 5/17 5/18〜
2 A列 ┌-----------------------------
3 A品名 | (1,1) (1,2) (1,3) (1,4)
4 B品名 | (2,1) (2,2) (2,3) (2,4)
5 C品名 | (3,1) (3,2) (3,3) (3,4)
6 〜 |
(1) 書き込みたい正味範囲だけの配列を用意します。
図の ↓部分 (行番号, 列番号)
┌-----------------------------
| (1,1) (1,2) (1,3) (1,4)
| (2,1) (2,2) (2,3) (2,4)
| (3,1) (3,2) (3,3) (3,4)
|
(2)品名と行番号の対応表を用意します。
「A品名」といったら、行番号1 が、
「B品名」で問い合わせたら、行番号2が返るようなシステムです。
・・・
これには Dictionary オブジェクトを使います。
dic("A品名") = 1
dic("B品名") = 2
dic("C品名") = 3
と、
品名をキーに、行番号をアイテムとして辞書に記憶しておくと、
毎回A列を検索しなくても、ある品名に対応する行番号が
行番号 = dic(品名)
のようにたちどころに得られます。
(3)同様に、日付から列番号が返るような式を用意します。
上の例ですと, 5/15 が 1列目なので、
ある日付の列番号 は (ある日付 - 5/14シリアル値) という式
でもいちおう列番号が得られそうです。
(4)
(1)の配列と (2)(3) を予備調査したら、
データベースを上から順に読んでいき、
行番号 = dic("A品名")
列番号 = #5/1# - #5/14#
配列(行番号,列番号) = 100
のように 順に配列内の適切な位置に データを代入していき、
(5)最後に シートの[B3]セル以降に 配列を貼り付けます。
|
|