私はExcelでVBAを使用して、ロイター3000データベースからいくつかの情報を取得しています。私が取得するデータは、日付を保持する1つの列と、数値を保持する他の列で構成される2次元配列として提供されます。
2秒以内のプロセスで情報を取得した後、このデータをワークシートに書き込みたいと思います。ワークシートには、日付の列と数値の列がいくつかあり、各列には同じカテゴリの値が含まれています。配列の行を繰り返して日付と数値を取得し、それらを変数に保持します。次に、ワークシートの日付列で日付を検索し、日付を見つけたら値を書き込みます。これが私のコードです:
Private Sub writeRetrievedData(retrievedData As Variant, dateColumnRange As String, columnOffset As Integer)
Dim element As Long: Dim startElement As Long: Dim endElement As Long
Dim instrumentDate As Variant: Dim instrumentValue As Variant
Dim c As Variant: Dim dateCellAddress As Variant
Application.ScreenUpdating = False
Sheets("Data").Activate
startElement = LBound(retrievedData, 1): endElement = UBound(retrievedData, 1)
Application.DisplayStatusBar = True
Application.StatusBar = "Busy writing data to worksheet"
For element = startElement To endElement
instrumentDate = retrievedData(element, 1): instrumentValue = retrievedData(element, 2)
Range(dateColumnRange).Select
Set c = Selection.Find(What:=instrumentDate, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not c Is Nothing Then
c.offset(0, columnOffset).Value = instrumentValue
End If
Next element
Application.DisplayStatusBar = False
End Sub
私の問題は、このプロセスが非常に遅いことです。配列に5行しかない場合でも、タスクを完了するのに約15秒かかります。このプロセスを数回(データベースから取得するデータのセットごとに1回)繰り返したいので、実行時間をできるだけ短縮したいと思います。
ご覧のとおり、パフォーマンスを向上させるための最も頻繁なアクションの1つである、画面の更新を無効にしています。実行時間をさらに短縮する方法について誰か提案がありますか?
PS。私はすでにその部分をテストしているので、データ取得プロセスにそれほど時間がかからないことを知っています(データが取得されるとすぐにMsgBoxに値を表示します)
よろしくお願いします。