Mutable_Yunの業務改善ブログ

業務改善や生産性向上のブログです。自動化の手段として、VBAやRPAの勉強に役立つ解説をしています。

遅い、重いは勘違い。VBA はエクセルさんの気持ちになって高速化する

思えばエクセルさんは健気な存在です。遅いとか重いとか言われて。

でも、それは普段エクセルを使う事務職で
プログラミングを知らない人はそういうこと自体にあまり思いが至らないかもしれません。

おそらく、エクセルやExcel VBAが遅いと言う人はコマンドラインから実行する他言語を知っていて、それらの言語と比較しているのだと推測します。

他の言語を知っているので、自動化ツールは調べながらでもすぐに作れてしまった。

そして、ちゃんと動くので、極端に言えば、それがVBAと言う言語の実力だと思ってしまう。
余計なループをしないなどの本質的な事はやった上でです。

しかし、VBAを動かすプラットフォームであるエクセルさんは非常に多機能です。

そこで、エクセルさんが気持ちよく動けるよう(実際に動いているのはエクセルさんではなくパソコンさんだけど、エクセルさんが動いてるイメージの方が分かりやすいのでこれでいい)、配慮してあげる余地があります。

セルへの書き込みは最低限にする、csvファイルはエクセルブック上ではなく、内部的に開く、画面の更新はしなくていいときは止める、などです。

これらはプログラムの実行速度の高速化の本質ではないかもしれません。本質はアルゴリズム的なムダを省く事。

上の例はアルゴリズム的なムダではなく、エクセルさんに余計なお世話をしていただかなくて済むようにすることです。

普段エクセルさんを、利用しているときはさんざんお世話になっているのに、プログラムを組む時だけ邪魔者扱いするなんてひどい!

エクセルさんにひとつひとつ丁寧に接すれば、必ずこちらの希望する速さで実行してくれます。

丁寧に接するとは、

  • 今回は画面の描画更新は不要ですよ
  • テキストは取り込めればいいので、ブック上に展開しなくていいですよ
  • セルには後でまとめて張り付けるので、途中計算は配列使いますね
  • 今回は値のみコピぺできればいいのでコピーメソッドではなく、値の代入にしておきますね


と言ったようなことをちゃんと伝えてあげる事。

PythonでAnacondaは重い、とかよく言われてが、言わばエクセルさんはAnacondaのようなものでクラスの塊です。とても大きなライブラリです。誰もが様々な用途に気軽に使えるようにする為です。

エンジニア向けではなく、普通の一般事務職の為のソフトです。
必要な機能だけインポートする、と言う概念ではありません。

だから、必要な機能だけインポートできないからこそ、余計な事は「しなくていよ」と言ってあげる必要があります。

これをせずに、エクセルさんや、VBAの事を遅いと言うのは、彼らに失礼!
丁寧に接して、エクセルさんとお互いいい関係を築きましょう。そうすれば彼らも期待に応えてくれます。

※一万回の中に一万行のループがあればさすがにそれは時間がかかります。でもそれはPythonでも同じです。