でーれーすげーげー

岐阜県岐阜市に在住です。ブログ名は、岐阜市近辺の方言で、とても感嘆したときに発する言葉です。

EXCEL VBA の動作を高速化してみました。

少し前から、仕事で EXCEL VBA をよく使っています。

昔から時々使ってはいたのですが、DB からデータをとってきて毎日集計する、という仕事が増えたので、これを機会に久々 VBA を使ってみましょう、と思い組んでみました。

プログラミングはメインの仕事だったこともあるので、特に悩むこともないのですが、独特なオブジェクト構造や、EXCEL VBA 特有の機能もあり、そういうのはネットで調べます。

ネットで調べると、いっぱい出てきます。だいたいはすぐに分かって困ることはありません。ただ、初心者向けに書かれていることも多いため、情報も千差万別、質もいろいろです。

とりあえず組んで動かしてみたけれど、結構遅くて時間がかかる。スピードアップの方法もネットにあるのかな?と思って調べるとそれもいろいろある。

再計算をさせないとか、EXCEL ブックを表示させない、というのが定番だが、「シートからデータを Variant 型変数に一括で取り込み、配列として使用する」方法が最も高速化に役に立った。

また逆に、「配列を一括でシートに貼り付ける」という方法もあることが分かった。

レコード数数万、1レコード100データ、というデータから抜粋してソートと統計処理をするプログラムなのだが、10秒ぐらいで終わる。

ということで使い出したのだが、これって結局、データ処理は VisualBasic のプログラムがすべて行っていて、EXCEL は INPUT とOUTPUT として使っているだけだ、と気づきました。

まあ、書式設定とか、条件に応じてセルに色をつける、などは EXCEL の普通の機能を使う方が楽でやりやすいですしね。

おかげで、まともにやれば人手で1時間はかかる作業が1分で終わるようになりました。しばらくしたら海外スタッフに任せることも簡単に出来そうです。

で、気づいたのだが、これって今はやりの「 RPA = Robotic Process Automation 」だよなー、って事。ん、厳密に言うと違うかな? RPA で VBA とか使ったら、そりゃルール違反か・・・。