|
こんばんは。
興味深いご質問ですね!!
じょじょさんが投稿された配列DATA()の型は何でしょうか?
数値データと書かれていることから推測すると、数値型の配列ということですか?
(Long、Single、Double)
新規ブックの標準モジュールにて
以下のコードを実行してその処理速度を比べてみてください。
(必ず、一度、ブックを保存した後に実行してください)
'============================================================
Sub test1()
Dim i, j
Dim st As Double
Dim data(1 To 256, 1 To 120000) As Long
For i = 1 To 120000
For j = 1 To 256
data(j, i) = Int(Rnd() * 254) + 1
Next j
Next i
MsgBox "サンプルデータの準備完了" & vbCrLf & "これから、ファイルの書き込みを行います"
st = [now()]
Open ThisWorkbook.Path & "\test.txt" For Output As #2
For i = 1 To 120000
For j = 1 To 256
Print #2, data(j, i); Chr(9);
Next j
Print #2, Chr(10);
Next i
Close #2
MsgBox "処理時間 : " & Format([now()] - st, "hh:mm:ss")
End Sub
'======================================================================
Sub test2()
Dim i, j
Dim st As Double
Dim data(1 To 256, 1 To 120000) As Long
For i = 1 To 120000
For j = 1 To 256
data(j, i) = Int(Rnd() * 254) + 1
Next j
Next i
MsgBox "サンプルデータの準備完了" & vbCrLf & "これから、ファイルの書き込みを行います"
st = [now()]
Open ThisWorkbook.Path & "\test.txt" For Output As #2
For i = 1 To 120000
For j = 1 To 256
Print #2, CStr(data(j, i));Chr(9);
Next j
Print #2, Chr(10);
Next i
Close #2
MsgBox "処理時間 : " & Format([now()] - st, "hh:mm:ss")
End Sub
'======================================================================
Sub test3()
Dim i, j
Dim st As Double
Dim data(1 To 256, 1 To 120000) As Long
For i = 1 To 120000
For j = 1 To 256
data(j, i) = Int(Rnd() * 254) + 1
Next j
Next i
MsgBox "サンプルデータの準備完了" & vbCrLf & "これから、ファイルの書き込みを行います"
st = [now()]
Open ThisWorkbook.Path & "\test.txt" For Output As #2 Len = 5120
For i = 1 To 120000
For j = 1 To 256
Print #2, CStr(data(j, i)); Chr(9);
Next j
Print #2, Chr(10);
Next i
Close #2
MsgBox "処理時間 : " & Format([now()] - st, "hh:mm:ss")
End Sub
test1,test2,test3の順に処理時間は短縮されています。
特にtest1とtest2の処理時間差は顕著です。
何故かというと、test1とtest2では、作成するファイル容量が違うからです。
数値データに対して、
Print #2,data;
とした場合、データの前後に空白が書き込まれます
空白123空白Tab空白222空白
のように。
対して、test2の文字列データに変換後の書き込みでは、空白が書き込まれません。
123Tab222
というように
作成されるファイルが小さいのですから、処理時間が速いのです。
test3では、バッファサイズを設定してみました。
微量ですが、処理時間が短縮されています。
試してみてください。
|
|