例えばCOBOL(思いついたのがこれなので勘弁して)で、IF文とEVALUATE文とでは速度が違い、後者の方が遅いので避ける、という話がある。

富士通の汎用機OSであるFSPのバッチ処理で計測したところ、確か前者が50秒に対し後者が60秒くらいの速度差の比率であったように思う。もし夜間処理で処理時間は十分余裕があるとか、マシン使用時間に課金されることがないとかであれば大差なく、どちらでもいいとなるのかもしれない。実際、コーディング規約で「IF文は使わない」という会社もあったくらいだ。可読性を重んじてのことだろうとは思う。

さて、VBAの場合でも「こうした方が早い」というものがある。例えばオブジェクトに対してならFor 文より For Eachの方が速い、などである。実際計測はしていないが、上記のような差くらいであろう。

しかし、中には「雲泥の差ほど処理速度が変わること」も存在する。

例えば
・セルひとつひとつにデータを出し入れするより、まとめた方が速い
・色やセル形式も複数行、複数列をまとめて指定した方が速い
ということがある。

表形式のシートへ入力/変更を加え、値や列の相関関係/行の相関関係などのチェックをさせる場合でも、セルの値を直接判定するのではなく、一旦表の状態のものをメモリ上のテーブルに移すと非常に高速になる。

しかし、メモリに写す方法や、写してから加工することがあるかどうかによってもどうコーディングすればいいのかは変わってくるので、是非規約化しておきたいところである。


標準でPDFファイルが作成できる。




例のごとく、記録。




Sub Macro1()

ExecuteExcel4Macro _

"(1,,,FALSE,TRUE,""C:\Book1.pdf"",TRUE,0,0)"

End Sub




バージョン4のマクロを使っているということにまずは驚いた。


マークしたパラメータであるが、


1つめ:作ったかPDFをすぐ開くか否か。Trueは開く、Falseは開かない。


2つめ:最適化の指定。0は標準、1は最小化。最小化は印刷には向かない模様。






最終行はExcel2003で65536行、Excel2007βでは1048576行である。


このように書くと分かりにくいが、負の数を取らない16進数で表現すると&H10000と&H100000である。







それはさておき、Excelのバージョンによって最終行が違うのだから、この最終行の値を保持していないものかとオブジェクトブラウザで探すのだが、やはり見つからない。





データがどこまで入っているかを確認する際に、「最終行からCtrl+上矢印を押した処理」をするケースがままある。その場合、やはり定数で提供しておいて欲しいと思う。




列も同様である。正式リリースでもこの定数の定義はないだろうけれど、前々から欲しいな、とは思っている。