|
こんばんは。
> わからないのは、2)品名と行番号の対応表を用意する部分
>
> 品名List = 品名.Value この処理ですが品名の値(商品名)だと思いますが、
> For i = 1 To UBound(品名List)この文でFor〜Next文1から最大値(添え字?)
> の範囲を処理する部分が、前に書いてある、
>>' dic("A品名") = 1
>>' dic("B品名") = 2
>>' dic("C品名") = 3
> を辞書に登録してないとうごかないのでしょうか?
> 上記登録は、モジュールにするのだとおもいますが、どこに入力しておくと処理
> されるのでしょうか?
>> Set dic = CreateObject("Scripting.Dictionary")
>> For i = 1 To UBound(品名List)
>> dic(品名List(i, 1)) = i
>> Next
で、書き込み先の「品名」が 何行目にあるか をDictionary に記憶
しておくということです。
要は、
<シート2>(データベース)
のほうから
データ 100 を <シート1>の「A品名」の行の 5/15 の列に、
データ 200 を <シート1>の「A品名」の行の 5/18 の列に、
データ 500 を <シート1>の「A品名」の行の 5/30 の列に、
データ 100 を <シート1>の「B品名」の行の 5/15 の列に
…
転記すればいいのですが、毎回 「A品名」は何行目にあるか?
「C商品」は何行目にあるか?
Find やMatch 関数使って 都度調べるよりも、最初に1回だけの走査で
<シート1>のA列の各品名(行見出し)が何行目にあるか行番号を
あらかじめ記憶しておけば、
データ 100 を <配列>の (1,1) 要素位置に、
データ 200 を <配列>の (1,4) 要素位置に、
データ 500 を <配列>の (1,15) 要素位置に、
データ 100 を <配列>の (2,1) 要素位置に、
…
簡単にすばやく格納できるということなんです。
>後 Dim date0 As Long
> date0 = 日付.Item(1).Value2 - 1 'つまり 5/14のシリアル値
> のItem(1).Value2-1 ’5/14を求める理由がわからない
> x = CLng(data(i, 2)) - date0’
> この部分の意味がわかりません
.Value2 プロパティはデータの内部格納値のことで、
Value が 2008/5/15 という日付のとき、 Value2 は 39583 という倍精度値です。
いま、data(i, 2) が 2008/5/15 であれば、
> x = CLng(data(i, 2)) - date0’
は、
x = CLng(#2008/5/15#) - 39582
すなわち、
x = 39583 - 39582
で、結局 x = 1 が返ります。書き込む列番号は 1 ということです。
> 後まったくそのまま使用して下記部分でデバッグがでます
> arry(y, x) = data(i, 3) 'インデックスが有効範囲にありませんと表示される
デバッグで中断しているときに、 コード上の y や x や i のうえにマウス
カーソルをあてがうと、それら変数の現在の値が表示されます。
この現在値が Redimで宣言した配列の要素数のなかにおさまってないと
> インデックスが有効範囲にありません
となります。
|
|