Excel VBA質問箱 IV

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

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


32020 / 76734 ←次へ | 前へ→

【49953】Re:書き出し処理速度について
発言  neptune  - 07/6/30(土) 11:17 -

引用なし
パスワード
   こんにちは

文字列の連結ですが、test1とtest2を比較してみて下さい。test2が圧倒的に
速いです。
test1:連結
test2:あらかじめ領域を確保しておき、置換する

Option Explicit
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Private T1 As Long
Private T2 As Long

Sub test1()
Dim a As String
Dim sbuf As String
Dim i As Long

  a = "今日は暑いぞ!123456789"
  sbuf = ""
  T1 = timeGetTime()
  For i = 0 To 10000
    sbuf = sbuf & a
  Next i
  T2 = timeGetTime()
  Debug.Print "Size = " & Len(sbuf) & "  処理時間" & vbTab & (T2 - T1) / 1000 & " Sec"
End Sub

Sub test2()
Dim a As String
Dim sbuf As String
Dim i As Long, lLen As Long
Dim lStart As Long

  a = "今日は暑いぞ!123456789"
  lLen = Len(a)
  sbuf = Space(320016) 'この320016はあらかじめ文字数を計りました。
             '実用では算出できると思います。
  T1 = timeGetTime()
  For i = 0 To 20000
    If i <> 0 Then
      lStart = lLen * i
    Else
      lStart = 1
    End If
    Mid(sbuf, lStart, lLen) = a
  Next i
  T2 = timeGetTime()
  Debug.Print "Size = " & Len(sbuf) & "  処理時間" & vbTab & (T2 - T1) / 1000 & " Sec"
End Sub

まぁ、物理的な書き込みの方が効果はあると思いますが、
更に高速化したい場合検討してみてください。
1 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 発言

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