May 11, 2018

Excel VBA の高速化のポイント

 転職してから業務の様々な場面でExcel VBAを用いることが増えました。世間でもRPA等といった初歩的な自動化/効率化は非常に注目を集めていますが、そんな大仰なものを用いなくてもVBAでやりたいことの多くは実現できます。  このVBA、言語仕様はもはや古いというレベルではないですし、実行速度も極めて遅いです。しかし、わざわざ開発環境を自分で整える必要もなく、何よりも多くの方に馴染み深いアプリケーションでプログラミングをたやすく実現できるという強みがあります。何でもかんでもExcelで実装し、Accessで処理すべきデータの管理/処理まで無理やりExcelにやらせている人が多かったりするのは否めませんが、マクロ付きファイルを頒布する際等にはやはり「Excelのファイルである」ということは有利です(すべての頒布先がAccessを利用している状況は稀でしょう。しかし、Excelにその心配がいるでしょうか?)。また、マクロの記録機能を用いれば初学者でも何となく動かしてみることはできますよね。さらに、記述した内容を簡単に視認できるというのは、修養のための環境としてはもってこいだったりするのです。  それでもいつも付きまとうのは「実行速度の遅さ」。特に、数十万レコードといった大量のデータをExcelで処理しなければならないときなど特に、適切でないコーディングが処理時間を大幅に膨らませてしまう恐れがあります。  網羅的な記述は目指せませんが、思いつく限りのポイントを挙げてみました。ご指摘やご意見頂戴できると幸いです。 参照を渡してプロシージャ内からオブジェクトにアクセスするのと、グローバルオブジェクトへアクセスするのとの間で速度差はほとんどない Boolean型変数の判定は「=True」「=False」よりも「」「Not」の方が早い 文字列型変数A、Bの比較は「A=B」「A<>B」よりも「A...

Apr 23, 2018

自省録 - マルクス・アウレーリウス

自省録 - マルクス・アウレーリウス 特筆すべきは、たとえば雄弁とか、法律、倫理、その他の事柄に関する知識など、なにかの点で当別の才能を持った人びとにたいしては、妬みもせずにゆずったこと。それのみか彼らを熱心に後援して、各々がその独特の優れた点に応じて名誉をうるようにはからったのであった。(第1巻一六) 思い起せ、君はどれほど前からこれらのことを延期しているか、また行く度神々から機会を与えて頂いておきながらこれを利用しなかったか。しかし今こそ自覚しなくてはならない、君がいかなる宇宙の一部分であるか、その宇宙のいかなる支配者の放射物であるかということを。そして君には一定のときの制限が加えられており、その時を用いて心に光明をとり入れないなら、...

トニオ・クレエゲル - トオマス・マン

トニオ・クレエゲル - トオマス・マン 打ち明けていえば、トニオはハンス・ハンゼンを愛していて、すでに多くの悩みを彼のためになめて来たのである。最も多く愛する者は、常に敗者であり、常に悩まねばならぬ──この素朴でしかも切ない教えを、彼の十四歳の魂は、もはや人生から受け取っていた。そして彼の性質として、こうした経験をよく覚え込んで──いわば心に書き留めておいて、そのうえ多少それを楽しんでいるのだった。  しかしそれでも彼は幸福だった。なぜなら幸福とは──と彼は胸の中で言った──愛せられることではない。愛せられるというのは、嫌厭の念と入りまざった、虚栄心の満足である。幸福...