
時間のかかる処理の場合に限って処理の進捗状況を表示するようにしたいと考えています。このためにVBAの処理時間測定を行う次のコードで時間を計測してみましたが結構大きなばらつきがでました。
msmStart = Timer
For i = 1 To 1000
For i2 = 1 To 10000
wk = (wk * 7) Mod 10000
Next i2
Next i
msmEnd = Timer
5回計測したmsmEndの数値です。単位は秒です。
0.1484375
0.1754375
0.15625
0.1484375
0.15625
このばらつきはガベージコレクションが影響しているのかもしれませんが、単純なコードなので疑問があります。
アプリはExelのみ立ち上げており、CPUが4コアなので他の処理の影響は考えにくいです。
環境はWindouws 10、Excel2016です。
こうしたばらつきの原因はなんでしょうか。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
平均 0.152344 sec
標準偏差 0.003906
平均に対する割合は、2.6%
これを大きなバラつきというのでしょうか。
こちらでも独自に計測してみましたが、
私には、そんなにバラつきには思えません。倍の時間になったりするというなら、また別ですが。ガベージコレクションっておっしゃると、ComObjectを、.Net から行っているという意味でしょうか。メモリーリークのような現象なら、はっきりとした症状がでます。
また、コードを変えて
Dim CNT As Long
Sub Test2()
msmStart = Timer
Dim wk As Double
For i = 1 To 1000
For i2 = 1 To 10000
wk = i * i2
wk = (wk * 7) Mod 10000
Next i2
Next i
msmEnd = Timer
CNT = CNT + 1
Debug.Print CNT; msmEnd - msmStart
End Sub
回数は、50回
AVERAGE 0.606093772
STNDEVP 0.013829674
この結果も、特に問題があるようにも思えません。
もし気になるなら、Microsoft Process Monitor やSystem Explorer など、いろいろなツールで、マクロを実行する際に付随するプログラムや割り込み監視することは可能ですが、こちらでやった結果では、最初のコードで100分の3秒程度の揺れを、現在のWindows関係のように、ネットにつながったり(NetWork Monitorで監視可能)、IME など、様々ソフトウェアが動いているものの上で、健全な環境下では、厳密に揺れを抑えたりすることもできませんし、何が原因かを特定したところで、とても、ご質問者様の希望する「安定」という結果にはなるとは思えません。
5回測定して、実行にかかった時間が0.14秒から0.17秒まで、約20%程度、ばらついた結果となったので、疑問に思いここに質問いたしました。
ユーザにとっては、標準偏差で考えてもあまり意味がないように思います。
今回のコードは単純な処理ですので、その処理中にかなり「重い処理」が断続的に割り込んでいると考えられます。
.NETは関係ありません。質問で説明したコードのみの実行です。
10秒とか100秒とか、もっと長い時間をかければ「重い処理」の影響は目立たなくなるかもしれません。
私の環境ではMac上でWindowsを走らせているので、Mac側の割り込みとWindows側の割り込みの両方が影響しているようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) エクセルVBA マクロ処理中のポップアップメッセージについて 1 2023/08/04 21:34
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- 物理学 質量とは何か? 6 2023/04/17 20:44
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) 【VBA】For文を使用し、行をコピーして別シートに貼り付ける方法を教えてください。 4 2022/07/19 09:01
- 統計学 係数値Nの際の95%信頼区間 1 2023/05/14 15:59
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
win10で、正確な待ち時間の作り方
-
プログラム上のCPU稼働率低減に...
-
エクセルVBAをマスターしたい
-
Excelでのセル内容の高速消去方法
-
wavelet変換のソフト
-
C言語:関数を使うメリットとデ...
-
エクセルVBA 時間抜けの取得
-
If Not c Is Nothing Then ~延...
-
テキストファイルの空行をスキ...
-
DELL inspiron1300のCPU交換
-
「単体テスト」に関する深刻な...
-
C言語で、文字とか入力されなく...
-
キャッシュを意識したプログラ...
-
Macターミナルで実行中のプログ...
-
家電製品の電力周波数を変える機械
-
ウインドウにデータを入力する...
-
VBSでのSendKeysでの画面の最小化
-
ACCESS側からEXCELの書式を設定...
-
第三者に画面を同期するソフト...
-
フィボナッチヒープです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
win10で、正確な待ち時間の作り方
-
Excelでのセル内容の高速消去方法
-
Excel VBAにて、2GB超の点群デ...
-
小数点を含む数値かどうか判断...
-
プログラム上のCPU稼働率低減に...
-
SQLの速度をあげるには・・・
-
DoEvents関数って何?
-
基本情報技術者試験詳しい方へ...
-
実行時のCPU使用率を増やしたい
-
VC++2010 GDIオブジェクトの解...
-
C言語 時刻差分の算出方法
-
ナップザック問題?をエクセル...
-
エクセルVBA 時間抜けの取得
-
Excel(VBA)でSetTimer関数を使...
-
ノットイコールを教えて下さい
-
VBでの簡易電卓の作成(減算方...
-
If Not c Is Nothing Then ~延...
-
Excel VBA データ削除の高速化
-
絶対パスの取得について
-
テキスト処理の速度の速い言語
おすすめ情報
コードに不足がありましたので不足分を追記したコードを示します。
msmStart = Timer
For i = 1 To 1000
For i2 = 1 To 10000
wk = (wk * 7) Mod 10000
Next i2
Next i
msmEnd = Timer
msmTime = msmEnd - msmStart '処理時間測定結果を保存する
このmsmTimeの値が上のようにばらつきます。