配列を自分なりに説明してみる。
配列を自分なりに説明してみようと思います。
あくまで、僕のイメージです。想像しないと配列は作れません!
だって、存在しない0列0行に架空のゼロを想像する感じなんですから.....。
ちょっと想像力が必要になります。
簡単にA列(単価)とB列(数量)を掛け算するだけの表にしますね。
配列で計算できるかどうかやってみます。
’===================================’
Sub Hiretsu()
Dim i As Long, Table As Variant, n As Long
n = Cells(Rows.Count, 1).End(xlUp).Row
ReDim Table(n - 2, 0)
For i = 2 To n
Table(i - 2, 0) = Cells(i, 1) * Cells(i, 2)
Next i
Range("B2",Cells(Rows.Count,2).End(xlUp)).Offset(0, 1) = Table
Dim i As Long, Table As Variant, n As Long
n = Cells(Rows.Count, 1).End(xlUp).Row
ReDim Table(n - 2, 0)
For i = 2 To n
Table(i - 2, 0) = Cells(i, 1) * Cells(i, 2)
Next i
Range("B2",Cells(Rows.Count,2).End(xlUp)).Offset(0, 1) = Table
End Sub
’===================================’
一つ一つ計算してC列(合計)に記入するとすごく時間が掛かります。
配列を使わず、F8で一つ一つ記述させるVBAを作って確認してみると
よくわかると思います。
配列を作るとき、僕は「架空の0(ZERO)」と勝手に呼んでます。
配列は0からスタートなので気をつけなくちゃです。
架空の0と先頭行を含めると-2になります。
「Tableに一度格納すると早くなる」この言葉に騙されてはいけません!
Tableに格納するだけじゃ処理は早くなりません。
僕は言葉を信じてTableって変数で、せっせとセル範囲を格納してました(無念)
そしてある時、気づかされました。格納するだけじゃ何の意味もない!!
格納したものを最後にお届けしないとダメなんです!
上記の場合A列単価*B列数量→Cells(i,1)*Cells(i,2)をTableに格納
Next iの後(その後)
B列の一つ隣→.Offset(0,1)にして格納したものを届けます!
一つ一つ計算して記述すると遅くなるので、計算はさせるけど記述はすべての計算が終わってから→「一回で一塊に記述する!」って感じです。
想像がし難い場合はこんなことも出来ます!
'====================================================='
sub hairetsu2()
Dim i As Long
Dim Table1 As Variant
Dim Table2 As Variant
Table1 = Range("A2:B10000") 'A1からにしたらインデックス範囲から外れます。
ReDim Table2(1 To 10000, 1 To 1) '二次元配列で記載
Dim i As Long
Dim Table1 As Variant
Dim Table2 As Variant
Table1 = Range("A2:B10000") 'A1からにしたらインデックス範囲から外れます。
ReDim Table2(1 To 10000, 1 To 1) '二次元配列で記載
For i = LBound(Table1, 1) To UBound(Table1, 1)
Table2(i, 1) = Table1(i, 1) * Table1(i, 2)
Next i
Table2(i, 1) = Table1(i, 1) * Table1(i, 2)
Next i
Range("C2:C10000") = Table2
End Sub
End Sub
'====================================================='
あまりやりたくないですが、格納したいセル範囲をすべてTable1に入れる。
Table2も作って、予め0は使わない様にReDimで予約
スタートの範囲(LBound)は分かってますが、LBound to UBoundにしてます。
範囲が分かってるのに分かってない振りをして、最後に格納するんです。
「後だしじゃんけん」みたいでオススメでは無いですが、配列っぽく出来ます。
でも、似たようなことを何度も継続して行ってました。
VBAをスポーツとして楽しんでいますので、自分なりに理解したことをちょっとご紹介しました。
もっとこうした方がいいよ!ってのは有ると思います。それに、こんな簡単な記述なら
VBAにしなくても、ワークシート上で可能です。
C列に→{=A2:A100000*B2:B100000}
最後までお付き合いいただきありがとうございました。
今後とも暖かく見守ってください・。