トップページ > プログラム > 2015年11月23日 > TfJpaPii

書き込み順位&時間帯一覧

5 位/208 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000100022000207



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
906
Excel VBA 質問スレ Part38 [転載禁止]©2ch.net

書き込みレス一覧

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 の実行自体にはそれほど時間はかからないということですか?


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。