Excel VBA質問箱 IV

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

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


12940 / 76734 ←次へ | 前へ→

【69306】Re:大量セル書き込みの高速化
回答  UO3  - 11/6/23(木) 16:21 -

引用なし
パスワード
   ▼えすたろう さん:

こんにちは

アップされたコード、不要なところもありますが、たとえばそのままで
処理の最初に Application.ScreenUpdationg = False
処理の最後に Application.ScreenUpdationg = True
これをいれるだけで(2003までなら)かなり早くなると思います。

ただ、抜本的には、セルへの書き込み、これが結構ばかにならない処理コストです。
できるだけ、セルとのコンタクト回数を減らすため、
・最初にシートの内容を配列に取り込む
・配列内でループさせて処理する
・最後に一挙にシートに書き戻す。
こうすることで、処理時間は大幅に短縮されます。
この形をとるならApplication.ScreenUpdationg の手当ては不要です。

Sub Sample()
  Dim myB As Range
  Dim v As Variant
  Dim i As Long
  
  With Sheets("貼り付け").Range("A1").CurrentRegion
    Set myB = Intersect(.Cells, .Cells.Offset(1))
  End With
  If Not myB Is Nothing Then
    v = myB.Value
    For i = 1 To UBound(v, 1)
      v(i, 3) = Left(v(i, 1), 2)
      v(i, 4) = Mid(v(i, 1), 3)
      v(i, 5) = Left(v(i, 2), 2)
      v(i, 6) = Mid(v(i, 2), 3)
    Next
    Sheets("貼り付け").Range("A2").Resize(UBound(v, 1), UBound(v, 2)).Value = v
  End If
  
  Set myB = Nothing
  
End Sub
5 hits

【69304】大量セル書き込みの高速化 えすたろう 11/6/23(木) 15:28 質問
【69305】Re:大量セル書き込みの高速化 neptune 11/6/23(木) 16:04 回答
【69309】Re:大量セル書き込みの高速化 えすたろう 11/6/23(木) 20:09 お礼
【69313】Re:大量セル書き込みの高速化 UO3 11/6/23(木) 22:43 発言
【69306】Re:大量セル書き込みの高速化 UO3 11/6/23(木) 16:21 回答
【69308】Re:大量セル書き込みの高速化 えすたろう 11/6/23(木) 20:08 お礼
【69310】Re:大量セル書き込みの高速化 UO3 11/6/23(木) 21:24 回答
【69311】Re:大量セル書き込みの高速化 UO3 11/6/23(木) 21:42 発言
【69334】Re:大量セル書き込みの高速化 momo 11/6/27(月) 14:34 発言
【69337】Re:大量セル書き込みの高速化 UO3 11/6/27(月) 15:45 発言
【69338】Re:大量セル書き込みの高速化 momo 11/6/27(月) 16:02 発言

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