置き換えのヒント
「…とまあ、配列変数による代入に関しては、こんな感じだ。
なにか質問はあるかい?」
八木くんのマンションでは、延々と続いていた解説がやっと終わったところです。
「なるほど、配列変数による代入の仕組みについては、だいたい理解できたよ。
…でもそれを、俺が作ったCSV取り込み処理の中に組み込まなければ意味がないんだろう?
…それは、どうやってやるんだい?」
「それを考えるのが、お前の仕事だろう?」
そっけなく答える八木くんに、星くんは口をパクパクとさせます。
「…とまあ、それではちょっとかわいそうだから、ヒントを教えてやるよ。
まず、バリアント変数に格納するセル範囲は、セルA1から使用されている最終行、最終列までになるよ。
なぜならおまえの作ったCSV取り込み処理は、行番号を格納する変数rや、列番号を格納する変数cなどが、
セルA1を基準に動作するように実装されているからだ」
星くんは手帳を取り出して、カリカリとメモを取ります。
「…あと、バリアント型変数に処理を置き換えるべき箇所は、ここと、ここと…ここになる」
八木くんがVBEの画面を指さします。
Sub CSVデータ取り込み()
:
For i = 1 To UBound(v)
If v(i) <> "" Then
日付 = Mid(v(i), 1, InStr(v(i), ":") - 1)
数量 = Mid(v(i), InStr(v(i), ":") + 1)
c = 日付列取得(日付)
If c <> 0 Then
Cells(r, c) = 数量
End If
End If
Next i
:
End Sub
Private Function 製品行取得(ByVal 製品 As String) As Long
:
For r = 6 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(r, 1) = 製品 Then
製品行取得 = r
Exit Function
End If
Next r
:
End Function
Private Function 日付列取得(ByVal 日付 As String) As Long
:
For c = 4 To Cells(4, Columns.Count).End(xlToLeft).Column
If Format(Cells(4, c), "yyyymmdd") = 日付 Then
日付列取得 = c
Exit Function
End If
Next c
:
End Function
「この3つは共にループの中にあり、頻繁にセルの読み書きを行っている箇所だ。
ここを、配列変数に置き換えるだけで、処理は飛躍的に速くなるよ」
「…ちょっとまった!
配列変数はCSVデータ取り込みプロシージャの中に宣言するんだよね?
どうやって製品行取得や、日付列取得プロシージャの中で利用すればいいんだい?」
八木くんはニンマリとしました。