Excelのツール開発:関数(非マクロ)ツールとVBA使用ツールの比較
概要
この記事について
Excelでデータ管理したりドキュメントを出力したりするツール(機能の多寡を問わず)を作成しようとする際に、
大別すると、次のような選択肢があるかと思われる。
- 関数(マクロを使用しない。標準搭載の関数のみで実装)ツール
- VBA使用ツール
それぞれにメリット・デメリットがあるが、
個人的な見解として
それらをまとめてみたい。
サマリ(表)
最初にまとめとして表を記す。
関数(非マクロ)ツール | VBAツール | |
開発難度 | 低 | 高 |
自由度 | 低 | 高 |
できること |
データの管理(手入力、 データベースとの連携) 帳票等成果物の出力 ・プリンター印刷 メール作成、WebサイトのURL管理、ファイルパスの管理 |
データの管理(手入力、オリジナルフォームの入力、ファイル読み込み、データベースとの連携) 帳票等成果物の出力 ・プリンター印刷 ・csvファイル ・その他、だいたいどのような形式でも可能 メール作成、WebサイトのURL管理、ファイルパスの管理(より高度なレベルで) Webサイトのスクレイピング Webサイトに対するHTTPリクエスト、レスポンス取得 |
作業精度向上のレベル | 低 | 高 |
作業効率化のレベル | 低 | 高 |
動作安定性 | 高 | 低 |
メンテナンス性 | 高 | 低 |
比較
作りやすさ
エクセル関数は義務教育の関数の知識があれば使いやすいだろう。
IF関数やVLOOKUP、OFFSET関数などはプログラミング的な発想や知識が必要かもしれない。
一方、VBAはVisual Basicを用いたプログラミング作業が必要のため、
プログラミング未経験者にとって難易度は高い。
自由度とできること
エクセル関数によってできるのは、データの管理、整形、入出力、
文書の作成、出力、メール送信などに限られる。
外部のアプリケーションの操作などはできない。
VBAの場合、MS Officeのアプリはもちろん、
テキストファイル、バイナリファイルを操作可能。
Sendkey関数でキー操作をエミュレートして他のアプリを操作する荒業もある。
ブラウザを操作する場合、Seleniumを用いる。
VBAでできることは非常に多岐にわたるが、複雑なことをしようとすればするほど
バグや不安定さも増大する。
自動化のもたらす利益の比較
自由度が高く、一連の作業を精度高く素早く行うことができるVBAツールは
自動化による恩恵を最大化することができる。
安定性
エクセル関数はあらかじめ動作の決まった部品の組み合わせのため、
破壊的な動作をもたらすバグの可能性は極めて少なく、
関数入力先セルに #VALUE! 等の表記でエラーが表示される。
そのため、エラーの発生がわかりやすい。
VBAツールの場合、
プログラムの書き方次第でExcel自体が強制終了したり、
編集先テキストファイルのデータを汚染したりする。
例えばテキストファイル編集中に
不正な処理によりエラー落ちすると、
望まないデータが書き込まれているかもしれない。
メンテナンス
VBAのメンテンナンスはVBのコードを読める人間が必要になる。
そのため、保守できる人材が退職あるいは異動したばあい、
今いる人間ではメンテ不可能になる恐れがある。
そのため、簡易なものでもいいから内部の仕様のドキュメントを作成しておくことが重要である。
まとめ
非マクロツールは保守性や安定性が高いが、自動化への寄与は劣る。
VBAツールを作成した場合、仕様のドキュメントは常に残しておくようにしたい。