Excel「VBA」でおこりがちなトラブルと対策とは?

トラブルを未然に防ぐためのポイント


ExcelVBAは記述がしやすいために何も考えなくても動いてしまうというメリットがあります。

しかしこれがデメリットでもあり、できあがってから意図しないトラブルに見舞われることも少なくありません。

今回はそのトラブルを未然に防ぐためのポイントをお伝えします。

ちなみに、このポイントはExcelVBAに限らず他の言語で記述する際にも有効ですので是非気をつけて頂きたいと思います。

無限ループに陥る


繰り返し文に終了条件に最大繰り返し回数などの条件を設けなかった場合、実行後無限ループに陥り見た目的にフリーズしたような状態になることがあります。

これを防ぐためには繰り返し回数に最大回数の上限を設けたり、最大回数を設けられない場合はタイマーで繰り返しにかける時間の上限を設けたり、その他何らかの形で繰り返しの実行の都度その実行が適当なものであるか判断する仕組みを設ける必要があります。

フリーズしてしまう場合もある

特に都度メモリーのリソース(資源)を食うものであったりすると、そのExcelVBAを含んだExcelのみならずシステム全体に影響してひどい場合はWindows自体の動きが鈍くなったりフリーズしてしまう場合もありますので注意が必要です。

不明なエラーが出る


実行すると毎回ではないがたびたび不明なエラーが出るといったケースにも注意が必要です。

これは複雑にプログラムを記述していたり、アドオンと呼ばれるオプションプログラムを参照する場合に多く、特にデータベース関連のプログラムを利用する場合などに見られます。

どうしても利用しないといけない場合をのぞき、必要性が高くない場合は使わないで単純化できないか一旦考えることも有効です。

変化や動向を見ることが大切

その他にもフォームなどを使ってそれに様々な機能を持たせたり、描画系の処理を行う場合、そして他のブックを呼び出して処理を行う場合に起きることがあります。

この場合はどの段階で発生するのかあらかじめ目星をつけて、その疑わしい部分を一行ずつ実行してどこで発生しているか確認したり、メモリーの可能性も含んでいる場合はタスクマネージャーを開いてメモリーの変化や動向を見ることで原因が掴みやすくなります。

メモリーへの配慮


前段の無限ループ、不明なエラーでも軽く触れていますがメモリーへの配慮にも注意が必要です。

最近のパソコンはメモリーの容量が大きいため以前ほど気にするす必要は無くなりましたが、それでも計算処理などで繰り返し都度変数の値が増したり、フォームの描画や、他のブックの呼び出しを行うと途端にメモリーの使用率が上がります。

対策としてはある一定のタイミングで変数の値を解放したり、他のブックなどを開くプログラムの場合は開いたブックの参照が終わったら、そのブックを閉じるなどの工夫が必要です。

プログラムセンスが磨かれる!?


既述のように最近はメモリーの容量が大きいため全く気にせず組まなくても動くといえば動くのですが、他のアプリケーションやプログラムが動いていると、そちらでメモリーを占有されている可能性もあります。

いつも潤沢にリソースがあるわけでない事を想定してメモリーの占有まで意識しながらプログラムを組むと将来エンジニアを目指している方はセンスが磨かれます。

まとめ


いかがでしたでしょうか?

お伝えした3つの注意点に共通して言えることは、コンピューター上のメモリー空間(情報空間)で起きてることを想像するということです。

プログラムの処理だけを考えず、コンピューターの中でどのような変化が起きているか想像することはとても重要なので将来少しでもエンジニアをめざしたいと考えてる方は是非意識してみてください。

パソコンやOSの仕組みも理解しておこう

ちなみに、OSの仕組みからそのメモリーの概要についての感覚が身につくと、パソコン上のトラブルへの対処も早くなるので興味ある方は本屋さんに行かれた時にパソコンやOSの仕組みについての解説書を軽くでも良いので読まれると参考になるかもしれません。