このサイトには,以前Excel+VBAをベースとするシステムを構築した経験から学んだり編み出したノウハウをまとめています。

スマートフォンやクラウド全盛とはいえ,オフィスのデスクで使われている多くのコンピュータにはMS-Excelがインストールされており,日常業務で使われることも多いでしょう。そのため,ExcelをベースにVBAで機能を拡張したアプリケーションは,うまく作れば開発工数を抑えられるだけでなく,ユーザーにとっても使い勝手の良いものとなります。

しかし,実際にExcel+VBAでシステムを開発したり運用してみて初めて見えてくるやっかいな問題もあります。このサイトでは,VBA特有の設計上の問題に対して経験に基づいた汎用的な解決策を紹介することを目的としています。そのため,ワークシートの印刷範囲をVBAから設定するにはどうすればよいかなどといったネットや本を探せば簡単に見つかりそうなテクニックは原則として扱っていません。それよりも,アプリケーションでワークシートなどのオブジェクトをどう管理すべきかという内容や,アプリケーションフレームワークを設計する際に参考になりそうな内容を紹介しています。

トピックの紹介

現在のコンテンツは以下の通りです。サイトのアクセスが伸びるようであれば,増やしていきたいと考えています。

プログラムによるExceelオブジェクト管理
ワークブックやワークシートといったExcelオブジェクトをアプリケーションでどのように管理すべきかについてのトピックです。VBAの開発環境(VBE)には,最初からExcelオブジェクト専用モジュールが提供されており,これらを編集すれば例えばワークシートの右クリックで表示されるショートカットメニューを変更したりといったことができます。しかし,複数のワークシートをグループとして扱いたい場合などは,Excelオブジェクトモジュールを使うのではうまくいきません。そこで,より柔軟性のある別の管理スキームを紹介しています。応用範囲の広い手法で,他のトピックを理解するうえでのベースとなる考え方でもあります。

レポートの動的生成
このトピックでは,VBAプログラムでExcelのレポートワークブックを生成する方法を紹介します。新しいワークブックをプログラムから管理し,レポートを作成します。VBAコードのみでレポートを描画する方式とテンプレートを使用する方式があります。また,生成したワークブックにVBAコードを付加する方法についても説明します。

プログラムとデータの分離
簡単なツールレベルではなく,アプリケーションのプラットフォームとしてExcel+VBAを採用した場合,リリース後のプログラムのメンテナンスも考慮する必要があります。Excel+VBAのアプリケーションは,プログラムとデータが同一ファイル内に存在するという特殊な構造を持つため,データであるワークブックの数が増えるとコードの入れ替えが非常に困難になるという問題があります。これを解決するためのフレームワークを提案しています。

マスターシートの照会
レポートなどを作成する際に,マスターシートから項目を取得して表示することがよくあります。例えば,商品コードと商品名の組み合わせを別シートに管理しておき,レポートには商品コードを入力するだけで商品名が自動的に表示されるといったものです。単純なケースではVLOOKUP関数がよく使われますが,複数項目がキーとなる場合はSUMPRODUCT関数を使うなどのテクニックが必要になり,再計算に時間がかかるなどの問題も出てきます。このトピックでは,VLOOKUP関数やSUMPRODUCT関数を使う代わりにVBAのクラスオブジェクトによってマスターデータを照会する方式を紹介し,そのパフォーマンスを検証します。

このサイトについて

  • このサイトはリンクフリーです。どのページへも自由にリンクを張っていただいて構いません。
  • 内容についてはできる限り確認してからアップロードするようにしていますが,もし誤りなどがあった場合の責任はご容赦ください。
  • ご意見・ご要望などありましたら,ページ一番下の拍手ボタンからコメントが記述できるようです。

更新履歴

2012年5月15日 初版リリース
2013年1月25日 トピック追記
2013年2月14日 誤記修正
2014年12月26日 サンプルプログラムの不具合・誤字修正(TJさん,ご指摘ありがとうございます。)
web拍手 by FC2
inserted by FC2 system