
taka



最新記事 by taka (全て見る)
- 『雑記』最近の私の話~ - 2019年9月26日
- 【動画】自作パソコン構成変更!ケースをNZXT H500に交換しました! - 2019年6月5日
- VBA 『Array関数』指定した要素で配列を作成する - 2019年5月23日
- 「動画」初完全ワイヤレスイヤホン『Jabra Elite Active 65t』 - 2019年5月17日
- VBA 日付で令和を簡単に判定してみよう - 2019年5月7日
どうも、taka(@takabou63)です(^^♪
3月も今日でおしまいですね(;^ω^)
日々の速さに衝撃を受けながら日々を過ごしています(笑)
さて、話はそれましたが、皆さんは「繰り返し処理」、一体どれが一番早いの?と思ったことはありませんか?
繰り返し処理には大きく分けて
の3つがあり、それぞれ使い方に対して特徴があるので、個人的には早さよりは使う場面で使い分けをしていてあまり気にしていなかったのですが、ふとこの疑問に行き着き実際に試してみることにしました(笑)
「For~Next」と「Do~Loop」どちらが早いのかテストしてみた
という訳で、「For~Next」と「Do~Loop」、どちらが早いのかテストしてみました(^^♪
「あれ?For~Eachは?」と思われたかもしれませんが、昔に途中まで作成していたコードがありまして、今回はそれを流用した形でFor~Eachを使用する作りになっていなかったんです(笑)
まぁ、言ってしまうと同じ条件の繰り返し処理なら「For~Each」が一番早いと思います(笑)
テスト条件/テスト内容
さて、今回のtestは下記の条件で実施しております(^^♪
パーツ名 | 使用パーツ |
---|---|
OS | Windows10 |
CPU | Core™ i3-7100 |
メモリ | 8GB |
ExcelVer | Excel2013 |
テスト内容は「For~Next」・「Do~Loop」それぞれで1億回足し算を繰り返しを1セットとして、その計算を10セット繰り返す処理を実行します。
つまり20億回の足し算を繰り返して結果を求めます(^^)/
テスト結果/テスト用コード
さて気になる結果ですがこのような結果となりました(^^)/
計算回数 | For~Next | Do~Loop |
---|---|---|
1回目 | 0.625秒 | 0.984秒 |
2回目 | 0.61秒 | 0.984秒 |
3回目 | 0.625秒 | 0.984秒 |
4回目 | 0.61秒 | 1秒 |
5回目 | 0.625秒 | 1.109秒 |
6回目 | 0.609秒 | 0.985秒 |
7回目 | 0.625秒 | 0.984秒 |
8回目 | 0.625秒 | 1.016秒 |
9回目 | 0.64秒 | 0.985秒 |
10回目 | 0.609秒 | 0.985秒 |
という訳で、10回のテストの結果、For~Nextのほうが若干早いという事がわかりました!
今回使用したコードをUP表示しておきますので気になる方はご使用ください(^^♪
Private Declare Function GetTickCount Lib "Kernel32" () As Long Sub sample() Dim Start As Long Dim Goal As Long Dim i As Long Dim r As Long Dim cnt As Long ' For r = 1 To 10 'For~Next---------------------------- Start = GetTickCount '測定スタート For i = 1 To 100000000 cnt = cnt + 1 Next i Goal = GetTickCount '測定終了 Worksheets("テスト").Cells(r, 2).Value = (Goal - Start) / 1000 & "秒" '測定結果 'Do~Loop---------------------------- Start = GetTickCount '測定スタート i = 1 Do cnt = cnt + 1 i = i + 1 Loop While i <= 100000001 Goal = GetTickCount '測定終了 Worksheets("テスト").Cells(r, 3).Value = (Goal - Start) / 1000 & "秒" '測定結果 ' Next r End Sub
フォロー・チャンネル登録お願いします
VBA以外についてのブログはこちら↓
https://yb-log.com/■Twitterフォロー
Follow @taka_pc1027■YouTubeチャンネル登録
コメントを残す