- Excel VBA 質問スレ Part38 [転載禁止]©2ch.net
906 :デフォルトの名無しさん[sage]:2015/11/23(月) 13:22:18.52 ID:TfJpaPii - グラフの参照範囲を書換えたり、
条件付き書式が多用されているシートの値を書換えたりするマクロがあるんですが、 実行速度を早くしたいときは Application.ScreenUpdating = Falseにすればいいんですか? Application.Calculation = xlCalculationManualも必要ですか? 書き換え範囲に数式はないのでこちらは不要かな?
|
- Excel VBA 質問スレ Part38 [転載禁止]©2ch.net
910 :906[sage]:2015/11/23(月) 17:18:07.07 ID:TfJpaPii - 以下のコードを条件を変えながら実行してみましたが、
画面更新停止させず、再計算も自動が一番早かったです。 画面更新を停止させたり再計算を止めると早くなるとの解説をよくみかけるのですが、 どうしてこの場合は早くならないのでしょうか? Public Sub ChartUpdate_test() Dim Data1, Data2 Dim lngtime As Long Dim i As Long lngtime = GetTickCount With ThisWorkbook.Worksheets("Chart") Data1 = .Cells(3, "U").Resize(100, 10).Value Data2 = .Cells(3, "AA").Resize(100, 10).Value For i = 1 To 50 'Application.ScreenUpdating = False 'Application.Calculation = xlCalculationManual .Cells(3, "U").Resize(100, 10) = Data2 .Cells(3, "AA").Resize(100, 10) = Data1 .Cells(3, "U").Resize(100, 10) = Data1 .Cells(3, "AA").Resize(100, 10) = Data2 'Application.Calculation = xlCalculationAutomatic 'Application.ScreenUpdating = True Next i End With Debug.Print GetTickCount - lngtime End Sub
|
- Excel VBA 質問スレ Part38 [転載禁止]©2ch.net
911 :906[sage]:2015/11/23(月) 17:22:42.35 ID:TfJpaPii - >>910のコードの補足です。
"Chart"シートにはグラフが2つあり、 1枚目のグラフはCells(3, "U").Resize(100, 10)の範囲をグラフに表示しており、 2枚目のグラフはCells(3, "AA").Resize(100, 10)の範囲をグラフに表示しています。 コード自体は、2つのグラフのデータを入れ替えて、また元に戻すといった無意味なものです。 Application.ScreenUpdating = False や 'Application.ScreenUpdating = False で どのくらい早くなるのか知りたかっただけです。
|
- Excel VBA 質問スレ Part38 [転載禁止]©2ch.net
914 :デフォルトの名無しさん[sage]:2015/11/23(月) 18:30:35.23 ID:TfJpaPii - >>912>>913
あ、早くなりました。そういうことか。 でもこれって、逆に言えば、 Application.ScreenUpdating = False を実行したり、 Application.Calculation = xlCalculationManual を実行するのに結構時間がかかるってことですよね? >>910のFor〜nextの間の処理1回程度なら Application.ScreenUpdating = False や Application.Calculation = xlCalculationManual を実行しない方が早いってことは。 Application.ScreenUpdating = False や Application.Calculation = xlCalculationManual はお決まりのように今までは追加してたけど、 時間のかからない処理なら逆に遅くなることもあるということか。 なるほど、勉強になりました。 ありがとうございました。
|
- Excel VBA 質問スレ Part38 [転載禁止]©2ch.net
915 :デフォルトの名無しさん[sage]:2015/11/23(月) 18:35:24.05 ID:TfJpaPii - オブジェクトにアクセスするのは時間がかかるとか、よく聞きますけど、
Application.ScreenUpdating = False や pplication.Calculation = xlCalculationManual なんかも時間がかかる処理なんでしょうか? 他に時間がかかる処理(プロパティの参照やメソッドの実行など)ってどういうものがありますか? 今後、早いコードを書くための参考にしたいのです。
|
- Excel VBA 質問スレ Part38 [転載禁止]©2ch.net
920 :デフォルトの名無しさん[sage]:2015/11/23(月) 22:25:28.69 ID:TfJpaPii - >>919
>なんでそんな結論になるかなあ… 画面更新停止したり 自動再計算を停止しても 画面更新停止しなくて 自動再計算を停止しないよりも遅いっていうのは、 そういうことじゃないんですかね?
|
- Excel VBA 質問スレ Part38 [転載禁止]©2ch.net
923 :デフォルトの名無しさん[sage]:2015/11/23(月) 22:56:17.49 ID:TfJpaPii - >>921
わからんから質問しとるんじゃ 質問に答える能力がないなら黙っとけよ >>922 Application.ScreenUpdating = False や、 Application.Calculation = xlCalculationManual の実行自体にはそれほど時間はかからないということですか?
|