|
Upしたコードは、元データが多い場合や品目番号の種類が多い場合
結果出力用配列が大きく成る為、元データを1行分づつ読み込んで
リソース優先で処理速度を犠牲にする様に書いて有ります
もし、元データ、品目番号の種類が巨大で無く速度優先にするなら
kanabunさんのコードと同様に、元データを一括して配列に取得し処理します
其の場合は以下の★印を変更して下さい、
kanabunさんのコードと同程度の処理速度に成ると思います
(元のコードの処理時間の7割程度の時間で済むかと思います)
'Sheet1に就いて
With rngList
'行数の取得
lngRows = .Offset(Rows.Count - .Row, 1).End(xlUp).Row - .Row
If lngRows <= 0 Then
strProm = "データが有りません"
GoTo Wayout
End If
'4列分データを配列として取得
vntData = .Offset(1).Resize(lngRows, 4).Value '★追加
End With
'Sheet1先頭〜最終迄繰り返し
For i = 1 To lngRows
'Sheet1から1行分配列として取得
' vntData = rngList.Offset(i).Resize(, 4).Value '★削除
'日付をシリアル値に変換
vntData(i, 3) = GetDate(vntData(i, 3)) '★1をiに変更
'日付がSheet2の範囲内で
If vntMin <= vntData(i, 3) And vntData(i, 3) <= vntMax Then '★1をiに変更
'品番がSheet2に在るなら
If dicIndex.Exists(vntData(i, 2)) Then '★1をiに変更
'個数を出力用配列に加算
vntResult(dicIndex.Item(vntData(i, 2)), vntData(i, 3)) _
= vntResult(dicIndex.Item(vntData(i, 2)), vntData(i, 3)) + vntData(i, 4) '★1をiに変更
End If
End If
Next i
|
|