Excel VBA質問箱 IV

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

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


9790 / 76734 ←次へ | 前へ→

【72501】Re:sheet1のデータをsheet2に整形して抽出する方法
発言  UO3  - 12/8/16(木) 15:57 -

引用なし
パスワード
   ▼タケル さん:

こんにちは

>もう少しこうしたほうが処理が速くなるとか、
>何かアドバイスがいただければ幸いです。

エクセルのシート上の処理で結構時間がかかるのは、セルへの書き込み行為、
それと、書き込んだ内容を今見えているエクセルの画面に反映させるための再描画処理です。

たとえば

Range("A1").Value = Range("D1").Value
Range("B1").Value = Range("E1").Value

こんなコードがあった場合、書き込みが2回、再描画が2回発生します。
これを

Range("A1:B1").Value = Range("D1:E1").Value

こうしますと、書き込みは1回、再描画も1回になりますので処理時間も短くなります。
さらに、プロシジャの先頭で

Application.ScreenUpDating = False と宣言しておきますと
エクセルによる再描画処理が休眠状態になりますので、実際の書き込み処理に要する時間だけで処理可能です。
で、お約束として、プロシジャの最後に
Application.ScreenUpDating = True
こうして、再描画を再開させます。
この時に、今まで休眠していた再描画機能が目を覚まして1回だけ、画面に再描画します。
(Application.ScreenUpDating は、ほぉっておいても、End Sub でリセットされますが)

2003までであれば、このApplication.ScreenUpDating による処理記述で、処理時間は、おおよそ半減でした。
残念ながら、2007以降は、セルへの書き込み負荷に比べて再描画負荷が小さいので、この手当をしても
しない場合より、わずかにまし ぐらいなんですが。

それより、セルへの書き込み回数を減らす方が効果が大きいですね。
極端に言えば1回だけにするとか。
そうすると、再描画のことも気にする必要はなくなります。
ただ、これは猛さんにとっては、なかなか簡単ではないかもしれません。

>それから、sheet1にデータがなくなったときに
>処理を終わらせるためには、どうしたらよろしいでしょうか?

A2からはじめて、A列のデータ最終まで繰り返す場合の基本的な構文を以下に2つほど。
一般にはSample1の形ですね。まずは、これらをしっかりと理解してください。

Sub Sample1()
  Dim maxRow As Long
  Dim i As Long
  
  maxRow = Range("A" & Rows.Count).End(xlUp).Row 'A列最終行番号
  
  For i = 2 To maxRow
  
    ' i 行目 の処理
    
  Next
  
End Sub

Sub Sample2()
  Dim i As Long
  
  i = 2
  
  Do While Cells(i, "A").Value <> "" 'A列のセルが空白になるまで実行
  
    ' i 行目 の処理
    
    i = i + 1
    
  Loop
  
End Sub
3 hits

【72481】sheet1のデータをsheet2に整形して抽出する方法 タケル 12/8/15(水) 14:45 質問
【72484】Re:sheet1のデータをsheet2に整形して抽出... UO3 12/8/15(水) 19:54 発言
【72487】Re:sheet1のデータをsheet2に整形して抽出... タケル 12/8/15(水) 22:17 回答
【72488】Re:sheet1のデータをsheet2に整形して抽出... タケル 12/8/15(水) 22:36 お礼
【72496】Re:sheet1のデータをsheet2に整形して抽出... kanabun 12/8/16(木) 9:28 発言
【72501】Re:sheet1のデータをsheet2に整形して抽出... UO3 12/8/16(木) 15:57 発言
【72490】Re:sheet1のデータをsheet2に整形して抽出... UO3 12/8/15(水) 22:40 発言

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