QuickBooksエクスポートのデータフォーマットをいくつか実行しようとしていますが、1ステップは非常に遅いです。私は "出力"と呼ばれるシートを持っていますが、これはすべてのエントリが目的のフォーマットでレイアウトされていますが、「マップ」と呼ばれる別のシートで使用するだけで十分です。Excel VBA:セルに配列値を設定するのが非常に遅い
これまでのすべては数式で行われ、その部分はうまく動作します。私は全体のエントリをループし、関連する情報を「出力」から5つの異なる配列にプルする小さなスクリプトを書いた。次に、それらの配列をループバックして、「マップ」内の適切な列にセルを挿入します。
私のスクリプトは、配列にすばやく移入しますが、セルの移入には非常に時間がかかります。私はforループを使って配列を繰り返し、各繰り返しには約3秒かかります。これは、何千ものエントリを扱う際に非常に長い時間です。
Sub Prettify()
Dim numbers()
Dim catagories()
Dim classes()
Dim subclasses()
Dim values()
Dim count As Integer
count = 2
' The upper bounds of the loop is a calculation of the number of entries we will access
For i = 2 To (Sheets("Data").Cells(7, 8).Value * Sheets("Data").Cells(4, 3).Value + 2)
If (Sheets("Output").Cells(i, 1).Value = "") Then
' Do Nothing
Else
ReDim Preserve numbers(count)
ReDim Preserve catagories(count)
ReDim Preserve classes(count)
ReDim Preserve subclasses(count)
ReDim Preserve values(count)
count = count + 1
numbers(count - 2) = Val((Sheets("Output").Cells(i, 1).Value))
catagories(count - 2) = Sheets("Output").Cells(i, 2).Value
If (Sheets("Output").Cells(i, 3).Value = 0) Then
classes(count - 2) = Sheets("Output").Cells(i, 4).Value
subclasses(count - 2) = ""
Else
classes(count - 2) = Sheets("Output").Cells(i, 3).Value
subclasses(count - 2) = Sheets("Output").Cells(i, 4).Value
End If
values(count - 2) = Sheets("Output").Cells(i, 5).Value
End If
Next
MsgBox (numbers(0))
MsgBox (catagories(0))
Sheets("Map").Activate
' This next part is slow
For j = 2 To count
Sheets("Map").Cells(j, 1).Value = numbers(j - 2)
Sheets("Map").Cells(j, 2).Value = catagories(j - 2)
Sheets("Map").Cells(j, 3).Value = classes(j - 2)
Sheets("Map").Cells(j, 4).Value = subclasses(j - 2)
Sheets("Map").Cells(j, 5).Value = values(j - 2)
Next
End Sub
約3年前の記事で私と同様の問題がありましたが、使用した修正は私の例には当てはまりませんでした。私はメッセージボックスを使ってさまざまな時点でコードをテストし、最後のforループの5つの割り当て手順はそれぞれ同じように遅いです。思考?
ご質問にリンクできますか?私たちは何の価値観を持っていますか? – arcadeprecinct
'Sheets(" Map ")を実行するとどうなりますか?ループの代わりにRange(" A2:A "&count).Value = numbers'ですか? – arcadeprecinct
http://stackoverflow.com/questions/13626001/excel-vba-writing-an-array-to-cells-is-very-slow –