- 環境
- 大変な仕事の定義
- 検証用コード
- セルサイズ:デフォルト
- セルサイズ縦横200ピクセル
- セルサイズ縦横5ピクセル
- フォント文字無し
- フォント文字1個
- フォント文字100個
- フォント文字サイズ36
- フォント文字サイズ5
- まとめ
- 終わりに
- VBA検証系の関連記事
Excelで作業中にセルの色を塗っていたら、ふと隣にフォントの色を変更するアイコンがあることに気が付きました。
Excel2019です。
普段なら、そんなもんか、と流してしまうところですが、このときに限って、「Excelにとって、どちらの方が大変な仕事なんだろう?」という疑問がふと頭をよぎりました。
別に比べる必要もないことですが、一度気になってしまったら検証しないと気が済みません。
ということで、セルの色を変えるのと、フォントの色を変えるのはどちらが大変な仕事なのか、
Excel君に聞いてみることにしてみました。
環境
Windows10 64 bit
Excel 2019 32bit
大変な仕事の定義
これを定義しておかないと、話が始まらないので定義します。
本来であれば、GUIで操作して、色が変わる時間やCPUの使用率等を調べるとかという話になるのですが、まず、無理です。
定量的に調査するためにはVBAの力を借りるのが手っ取り早いのでお力添えいただきます。
というわけで大変な仕事の定義は次の通りです。
VBAで操作を実行するのに要する時間が多い方が大変な仕事とする
これなら記録を取ることが容易で、定量的に観測することができます。
検証用コード
検証用コードは下記の通りとします。
Sub sample() Dim s As Double Dim e As Double Dim i As Long Const CNT As Long = 50000 s = Timer For i = 1 To CNT Range("A1").Interior.Color = vbBlack Range("A1").Font.Color = vbBlack Next i e = Timer Debug.Print e - s End Sub
作り込みが面倒だったので、For文の中は都度都度、手動でコメントアウトします。
手抜きですいません。
このコードを使って、色々な切り口で検証してみたいと思います。
検証する切り口は今回このようにしました。
・ セルサイズデフォルト
・ セルサイズ縦横200ピクセル
・ セルサイズ縦横5ピクセル
・ フォント文字無し
・ フォント文字100個
・ フォント文字1個
・ フォント文字サイズ36
・ フォント文字サイズ5
これらの切り口で各50,000回実行したときの時間を計測してみます。
これでどれが一番大変な仕事なのかが決まると。
では、セルの色を変えるのフォントの色を変えるのはどっちらが大変か~~ファイッ!!!
セルサイズ:デフォルト
まずはセルのサイズがデフォルトで、セル内に文字がない場合です。
実行結果: 26.78125秒
まずまずですね。
セルサイズ縦横200ピクセル
セルのサイズを変えたら時間は変わるのでしょうか。
そこも注目です。
実行結果: 30.9296875秒
おっと!?
セルサイズを大きくしたら処理時間が伸びました!!
セルサイズ縦横5ピクセル
カスみたいになってしましました。
さて、注目の結果は?
実行結果:34.61328125秒
あれ?サイズが大きいときより時間かかってんじゃん・・・。
これはきっと誤差の範囲ということですね。
フォント文字無し
次にフォントの色を塗ってみます。
セルに文字がある無しで結果は変わるのでしょうか。
さて、まずは文字無しです。
処理結果: 33.23046875秒
お・・・?これはもしや・・・どっちも変わらないのでは・・・?
フォント文字1個
文字1個の色を変えるのはどうでしょうか。
処理結果: 36.66015625秒
ほぼ、セルに色を付けるのと同じぐらいですね。
フォント文字100個
RPT関数で100を指定して、値貼付けしたので間違いありません。
処理結果: 95.1640625秒
うお!!如実に時間がかかっております!!
文字数が多いとどうやら時間がかかるようです。
フォント文字サイズ36
さて、文字数は処理時間に影響があることがわかりました。
では文字サイズはどうでしょうか。
処理結果: 38.1484375秒
ちょっと誤差の範囲ともなんとも言えない数値がでました。
フォント文字サイズ5
もはや何が書いてあるかわかりません。
aと書いてあります。
処理時間:38.1484375秒
これは誤差の範囲内ですね。
まとめ
結果は次の通りとなりました。
50,000回処理した結果 | (単位:秒) |
---|---|
セルサイズデフォルト | 26.78125 |
縦横200ピクセル | 30.9296875 |
縦横10ピクセル | 34.61328125 |
フォント文字無し | 33.23046875 |
フォント文字1個 | 36.66015625 |
フォント文字100個 | 95.1640625 |
フォント文字サイズ36 | 38.1484375 |
フォント文字サイズ5 | 38.1484375 |
どうやらセルサイズは処理時間にそれほど影響がないようです。
また、フォントサイズも同様に際立った影響が見られませんでした。
特筆すべきは文字数が多いと処理時間が如実にかかっているということです。
「文字数が多いと文字色を変えるのは大変な仕事になる」ということがわかりました。
その他は横並びですね。
ここから言えることは、文字色を変えるような処理があれば、セルに何も入っていない状態のときにフォント色を設定した方が少しでも高速化につながる(可能性が高い)ということです。
ちゃんとまとめらしい結果になりました。
終わりに
というわけでExcelにとってセルの色を変えるのは、条件によって仕事量に差はなく、フォントの色を変えるのは文字数の多さに比例して仕事量が増えるということでした。
もしかしたら、これも動作させる環境によって結果が異なるかも知れませんのでなんとも言えませんが、もし、0.1秒でも処理を高速化したい!!なんてことがありましたら何かの参考になるかも知れませんね。
ここまでお読みいただき、ありがとうございました。