Excel VBA質問箱 IV

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

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


11836 / 13646 ツリー ←次へ | 前へ→

【13827】作成したマクロの実行速度を早くしたいで... ぐっさん1966 04/5/14(金) 15:10 質問[未読]
【13828】Re:作成したマクロの実行速度を早くしたい... ichinose 04/5/14(金) 15:42 回答[未読]
【13829】Re:作成したマクロの実行速度を早くしたい... Jaka 04/5/14(金) 15:45 回答[未読]
【13839】ありがとうございました! ぐっさん1966 04/5/14(金) 21:06 お礼[未読]

【13827】作成したマクロの実行速度を早くしたいで...
質問  ぐっさん1966  - 04/5/14(金) 15:10 -

引用なし
パスワード
   はじめまして
行の非表示のマクロをWindows XPのExcel2003にて作成しました。
内容は以下の通りです。
以下のマクロを実行すると動作が非常に遅いです。
同じモジュールをWindows2000のExcel2000で動作させると問題ありません。
ファイルサイズは約10MB程です。マシン自体の性能の問題でもないようです。
初歩的な質問で大変恐縮ではありますがどうかご教授お願い致します。

Dim i As Long
Application.ScreenUpdating = False
 For i = 0 To 1000
  If Range("A1").Offset(i, 0).Value = "" Then
  Range("A1").Offset(i, 0).Rows.Hidden = True
  End If
 Next i
Application.ScreenUpdating = True

【13828】Re:作成したマクロの実行速度を早くした...
回答  ichinose  - 04/5/14(金) 15:42 -

引用なし
パスワード
   ▼ぐっさん1966 さん:
こんにちは。

>はじめまして
>行の非表示のマクロをWindows XPのExcel2003にて作成しました。
>内容は以下の通りです。
>以下のマクロを実行すると動作が非常に遅いです。
>同じモジュールをWindows2000のExcel2000で動作させると問題ありません。
>ファイルサイズは約10MB程です。マシン自体の性能の問題でもないようです。
>初歩的な質問で大変恐縮ではありますがどうかご教授お願い致します。
>
> Dim i As Long
> Application.ScreenUpdating = False
> For i = 0 To 1000
>  If Range("A1").Offset(i, 0).Value = "" Then
>  Range("A1").Offset(i, 0).Rows.Hidden = True
>  End If
> Next i
> Application.ScreenUpdating = True
Hiddenプロパティの設定って結構時間がかかるんですよねえ・・・。
と言ってもExcel2000では、たいした事なかったですけど。
ループの中で行の非表示をやめて、一括非表示にしたらどうですか?

'==============================================================
Sub main()
Dim i As Long
Dim hidden_rng As Range
Set hidden_rng = Nothing
Application.ScreenUpdating = False
 With Range("a1")
  For i = 0 To 1000
   If .Offset(i, 0).Value = "" Then
     If Not hidden_rng Is Nothing Then
      Set hidden_rng = Union(hidden_rng, .Offset(i, 0))
     Else
      Set hidden_rng = .Offset(i, 0)
      End If
     End If
   Next i
  End With
If Not hidden_rng Is Nothing Then
  hidden_rng.EntireRow.Hidden = True
  End If
Set hidden_rng = Nothing
Application.ScreenUpdating = True
End Sub

Excel2000でも少しは速かったですよ!!

【13829】Re:作成したマクロの実行速度を早くした...
回答  Jaka  - 04/5/14(金) 15:45 -

引用なし
パスワード
   こんにちは。
こう言うのでは?

Dim myra As Range
Range("A2:A1000").AutoFilter Field:=1, Criteria1:="="
Set myra = Range("A2:A1000").SpecialCells(xlCellTypeVisible)
ActiveSheet.AutoFilterMode = False
myra.Rows.Hidden = True
Set myra = Nothing

>ファイルサイズは約10MB程
10Mもあると遅いかも。

【13839】ありがとうございました!
お礼  ぐっさん1966  - 04/5/14(金) 21:06 -

引用なし
パスワード
   ichinoseさん、Jakaさん、ご教授ありがとうございました。
お二人のどちらの方法でも実行速度をあげることができました。

今後も何かありましたらご指導のほど宜しくお願いします。
本当にありがとうございました!

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