Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


31992 / 76734 ←次へ | 前へ→

【49982】Re:書き出し処理速度について
発言  ichinose  - 07/7/1(日) 23:36 -

引用なし
パスワード
   こんばんは。
興味深いご質問ですね!!

じょじょさんが投稿された配列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では、バッファサイズを設定してみました。

微量ですが、処理時間が短縮されています。

試してみてください。
5 hits

【49945】書き出し処理速度について じょじょ 07/6/29(金) 23:11 質問
【49948】Re:書き出し処理速度について neptune 07/6/30(土) 9:34 発言
【49950】Re:書き出し処理速度について Hirofumi 07/6/30(土) 9:53 発言
【49952】Re:書き出し処理速度について Hirofumi 07/6/30(土) 10:04 発言
【49953】Re:書き出し処理速度について neptune 07/6/30(土) 11:17 発言
【49972】Re:書き出し処理速度について じょじょ 07/7/1(日) 15:41 お礼
【49975】Re:書き出し処理速度について neptune 07/7/1(日) 16:51 発言
【49976】Re:書き出し処理速度について Hirofumi 07/7/1(日) 20:06 発言
【49978】Re:書き出し処理速度について neptune 07/7/1(日) 22:51 発言
【49982】Re:書き出し処理速度について ichinose 07/7/1(日) 23:36 発言

31992 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free