あなたの職場でも一つはエクセルのマクロがあるのではないでしょうか。自分でVBAというプログラミング言語を書く事ができれば、自由自在にエクセルとその周辺の作業の自動化をする事ができます。しかし、VBAは遅いという評価をされることがしばしばあるプログラミング言語です。その真偽について解説します。
目次
VBAを遅いという人はなぜそう思うのか
VBAが遅いと言う人はなぜそう思うのかについて考えてみます。私の経験では大きく分けて2通りあります。
- ボタンを押したら瞬時にできる事を期待しているが、数秒かかるので不満を抱いている
- C言語など他言語の経験があり、他言語との比較で言っている
前者については、無駄の多いプログラムになっているか、非常に重たいエクセルファイルなどのファイルを取り扱っている可能性が高いです。工夫次第で相当改善されるので、しっかりとムダのないプログラム二書き直すことで、評価が変わるかも知れません。後者については一理ありますが、それでもやるべき事をやればある程度早くすることはできます。
遅いというのはコンピュータの処理が遅いのではなく処理にかかる時間が長いということ
VBAは遅いと言ってもVBAはプログラミング言語なのでVBAそのものが遅いというわけではありません。正しくはVBAで書かれたプログラムを実行するのには時間が掛かるというのが正確な表現です。これは言語仕様もありますが、ムダな作業をしているケースを非常に多く見受けます。
つまり、VBAそのものが処理に時間が掛かると言う面もあるものの、ムダな作業があれば言語仕様など吹き飛んでしまうほど時間が掛かると言う事です。VBAは事務職のユーザーが気軽にプログラミングできる言語です。プログラミングそのものが仕事であるエンジニアではない為、自動化したい作業を手作業でやった場合の手順そのままにコードを書いてしまうこともあります。このようなプログラムであれば処理に時間がかかる事は否めません。
VBAが遅いという前に、プログラムにムダがないか、確認してみると良いです。
エクセルの機能の多さに起因する問題
VBAというよりエクセルそのものに原因があると言う面もあります。エクセルは様々な人が便利に使える様に作られています。そのため、非常に多機能となており、普段使わないような機能も沢山持っています。エクセルのセルも1つひとつに列の幅や行の高さ、フォントや背景の色といった様々な情報を持っています。このため、エクセル自体が重いアプリケーションであると言えます。
たった一行を削除するだけでもそのように多くの情報を持ったセルを操作するのでとても作業量が多いことが分かります。VBAが遅いと言うよりも、エクセルそのものが重いので仕方ない面があります。
VBAの言語仕様としての問題
他の言語を知っている人がVBAは遅いという場合の意味です。これは正直なところ、非エンジニアの事務職は気にしなくて構わないレベルだと考えていますが、参考までに簡単に触れます。
パソコンはプログラミング言語を理解して作業をしているわけではありません。PCが解釈できるのは0と1の組み合わせだけです。他言語の中にはプログラミング言語を一旦0と1の間の言語に翻訳して、それをさらに0と1の組み合わせに置き換えるような事を行い、それを実行させるという様なことをしているものがあります。
一方、VBAの場合はプログラミング中もこの翻訳を行っていますが、プログラムの実行中も翻訳をしながら実行しています。予め翻訳してから実行するプログラミング言語と逐次、翻訳をしながら実行するのでは予め翻訳してから実行する方が早いに決まっています。
しかし、これを残念に思う必要は無いと考えます。なぜならば、このおかげで簡単にプログラミングを行い、簡単に実行する事ができるからです。プログラミング中に解釈がなく翻訳してからしてからしかプログラムのミスに気づけないとすれば、それは初心者にとっては大変なことです。気軽にプログラミングに取り組むことできるということは、非エンジニアにとって非常に大きなメリットです。
高速化を図るために心掛けること
以上のような言語仕様があるものの、ムダをなくすことによってVBAによるプログラムは相当高速化を図ることが可能です。心掛けることは丁寧にエクセルに向き合うと言うことです。既に述べたようにエクセルは様々な人が使うのに耐えられるように非常に多くの機能を持っています。普通、プログラムは必要な機能を呼び出して使う、と言う考え方なのですが、VBAの場合は多くの機能がデフォルトで付いてしまっているので、ひとつひとつ丁寧に不要な作業を「しなくてイイ」と伝えていく必要があるのです。これが丁寧にエクセルに向き合うと言う意味です。
具体的に例を挙げると下記の様な事をエクセルに伝える事です。
- 今回は画面の描画更新は不要ですよ
- テキストは取り込めればいいので、ブック上に展開しなくていいですよ
- セルには後でまとめて張り付けるので、途中計算は配列使いますね
- 今回は値のみコピぺできればいいのでコピーメソッドではなく、値の代入にしておきますね
結論
この記事の内容をまとめると下記の通りです。
- VBAが遅いのではなくエクセルが多機能すぎる
- 不要なことをしなくてイイと言う事を丁寧に伝えることによって相当の高速化を図ることができる
- 言語仕様としてVBAが遅いという面はあるが、ムダな処理の方が圧倒的に影響が大きい
- 言語仕様としての遅さは、様々な人が気軽にプログラミングに取り組めることと引き換えなので仕方ない
VBAは遅いと文句を言う前にまずはムダを取り除くためにできる事に取り組んでみましょう。
<ゆんの電子書籍>ゆんの電子書籍はすべてkindle unlimitedで読み放題です!