適材適所

PowerShellを中心にプログラミングやシステム管理の備忘録的なブログ

【Excel VBA】セルの色を変えるのとフォントの色を変えるのはどっちが大変なのか

f:id:shinmai_papa:20210305125612p:plain

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ピクセル

f:id:shinmai_papa:20210305125642p:plain

セルのサイズを変えたら時間は変わるのでしょうか。

そこも注目です。

実行結果: 30.9296875秒

おっと!?

セルサイズを大きくしたら処理時間が伸びました!!

セルサイズ縦横5ピクセル

f:id:shinmai_papa:20210305125709p:plain

カスみたいになってしましました。

さて、注目の結果は?

実行結果:34.61328125秒

あれ?サイズが大きいときより時間かかってんじゃん・・・。

これはきっと誤差の範囲ということですね。

フォント文字無し

次にフォントの色を塗ってみます。

セルに文字がある無しで結果は変わるのでしょうか。

さて、まずは文字無しです。

処理結果: 33.23046875秒

お・・・?これはもしや・・・どっちも変わらないのでは・・・?

フォント文字1個

文字1個の色を変えるのはどうでしょうか。

処理結果: 36.66015625秒

ほぼ、セルに色を付けるのと同じぐらいですね。

フォント文字100個

f:id:shinmai_papa:20210305125738p:plain

RPT関数で100を指定して、値貼付けしたので間違いありません。

処理結果: 95.1640625秒

うお!!如実に時間がかかっております!!

文字数が多いとどうやら時間がかかるようです。

フォント文字サイズ36

f:id:shinmai_papa:20210305125758p:plain

さて、文字数は処理時間に影響があることがわかりました。

では文字サイズはどうでしょうか。

処理結果: 38.1484375秒

ちょっと誤差の範囲ともなんとも言えない数値がでました。

フォント文字サイズ5

f:id:shinmai_papa:20210305125823p:plain

もはや何が書いてあるかわかりません。

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秒でも処理を高速化したい!!なんてことがありましたら何かの参考になるかも知れませんね。

ここまでお読みいただき、ありがとうございました。

VBA検証系の関連記事

www.tekizai.net

www.tekizai.net

www.tekizai.net

www.tekizai.net

`; Array.prototype.forEach.call(document.getElementsByClassName('kijinai_koukoku'),function(d){d.innerHTML=KIJINAI_ADS;}); Array.prototype.forEach.call(document.getElementsByClassName('adsbygoogle'), function(){ (adsbygoogle = window.adsbygoogle || []).push({});}); -->