ExcelVBA開発フレームワークとは? |
|
|
|
|
|
|
|
ExcelVBAによる開発を行う際に、よく使う機能をまとめたものである。 |
|
|
開発者は、このフレームワークを利用することで、効率的にそれなりの品質のアプリケーションが開発できるようになる。 |
|
|
このフレームワークが持つ機能は、下記の通りである。(一部予定) |
|
|
|
機能 |
説明 |
実装状況 |
|
|
スキーマ定義 |
行番号・列番号の定義を、VBAのコードに固定で持つのではなく、スキーマ定義のシートに記載された値を動的に取得するようにした。
これにより、スキーマ変更時のコードへの影響が少なくなる。 |
v0.10で実装完了 |
|
|
データアクセスクラス(DAクラス)の自動生成 |
各ワークシートのデータにアクセスする際に、Worksheetオブジェクトに直接アクセスするのではなく、データの入出力を管理するクラス(DAクラス)を作成し、そのクラスを通じてWorksheetにアクセスする方が保守性・拡張性が高まるし、入力チェックをする際にも便利である。
しかし、各ワークシートのスキーマに応じたDAクラスを準備するのはなかなか面倒くさい。
そこで、上記のスキーマ定義から、DAクラスを自動生成する仕組みを作成した。 |
v0.10で実装完了 |
|
|
入力チェック(ゴミ処理) |
ユーザーは時にとんでもない値を入力する。それでいてアプリが動かないと、すぐに「バグだバグだ!」と苦情を言ってくる。
「入力値が悪いんだから、知らねーよ」と言い返したくなるが、確かに、ある程度のゴミは機械的に取り除いてから処理した方が親切な設計である。
そこで、上記のDAクラスの中に自動で入力チェック(ゴミ処理)を組み込んだ。入力チェックは、まだ一部しか実装していないが、容易に拡張可能である。 |
v0.10で一部実装 |
|
|
メッセージユーティリティ |
ユーザーに表示するメッセージを、VBAのコードに固定で持つのではなく、「メッセージ一覧」のシートに記載された内容を利用するようにした。
ユーザーメッセージを一カ所に集中させることで、実装と同時に統一的なメッセージ設計が簡単にできるようになる。また、適切にメッセージ設計をすることで、エラー時の対処がとりやすくなる。 |
v0.10で実装完了 |
|
|
Javaへのインターフェース提供 |
上記のスキーマ定義から、JavaのDAクラスを自動生成し、Apache POIを用いて、Javaから対象のワークシートにアクセスができるようにする。 |
今後実装予定 |
|
|
その他便利機能 |
DAクラス高速化バージョン、DAクラスの単体テストクラスの生成、AccessDBへのデータ入出力を容易にするクラスなどなど。 |
今後実装予定 |
|
|
|
|
想定利用者 |
|
|
|
|
Excel VBAをよく使う人 |
|
|
Excel VBAをある程度よく使う人であれば、当フレームワークの使い方を覚える価値があるだろう。 |
|
|
なお、当フレームワークは入門者向けではない。 |
|
|
|
オブジェクト指向プログラミングをある程度理解している人 |
|
|
オブジェクト指向プログラミングを理解していれば、当フレームワークを比較的容易に理解できるだろう。 |
|
|
|
|
想定規模 |
|
|
|
|
300行〜3万行程度のアプリ |
|
|
300行以下のミニアプリでは、フレームワークを使うと逆に冗長になるかもしれない。 |
|
|
3万行を超える中〜大規模アプリでは、そもそもExcel
VBAで実装すべきではない。 |
|
|
.NET FrameworkやJavaの使用を検討されたい。 |
|
|
|
|
使い方 |
|
|
|
|
1.画面設計 |
|
|
|
まず、どういう画面レイアウトにするかを考える。 |
|
|
|
Excelのデータにアクセスするためには、列番号と行番号を指定する必要があるため、 |
|
|
何列目(何行目)に何のデータを配置するか(スキーマ)を早期にフィックスさせるのがポイントである。 |
|
|
|
Excelでは、下記のようなスキーマがよく用いられる。 |
|
|
|
|
※横スキーマの例 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
※縦スキーマの例 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.「スキーマ定義シート」にて、スキーマ情報を吸い上げる |
|
|
|
まずは、スキーマ定義シートの「1.スキーマ基本情報」に必要な情報を入力する。 |
|
|
|
※画面設計で横スキーマを選択した場合は、「スキーマ定義_横」のシートを、 |
|
|
縦スキーマを選択した場合は、「スキーマ定義_縦」のシートを用いる。 |
|
|
|
※スキーマが複数種類ある場合は、シートをコピーして増やす。 |
|
|
|
|
次に、「列名と列番号を抜き出す」ボタンを押すと、「2.スキーマ」に列名と列番号が自動で入力される。 |
|
|
|
※縦スキーマの場合は、「行名と行番号を抜き出す」ボタンを押す。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.データアクセスクラスを生成する |
|
|
|
「スキーマ定義シート」の「2.スキーマ」に必要な情報を入力し、「データアクセスクラス生成」ボタンを押す。 |
|
|
すると、ExcelVBAFrameworkと同じフォルダの中に、クラスファイルが生成される。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
※物理名は入力必須。 |
|
|
|
※行番号か列番号のいずれかは入力必須。 |
|
|
|
列番号だけを入力して、行番号をブランクとすれば、下記のように、行番号を指定して値を取得するメソッドが生成される。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行番号と列番号が固定の場合は両方入力する。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4.生成したクラスファイルをインポートする |
|
|
|
|
3で生成したクラスファイルをVBEからインポートする。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.データアクセスクラスの利用 |
|
|
|
|
|
インポートしたクラスは下記のように使うことができる。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6.メッセージ設計 |
|
|
|
ユーザに表示するメッセージを、メッセージ一覧に記載する。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
※メッセージ番号、タイトル、メッセージは入力必須。 |
|
|
|
※エラーメッセージの場合、メッセージ番号の先頭に「E」を付け、Err.Raiseの際にE以下の番号を指定する。 |
|
|
|
|
|
7.メッセージユーティリティの利用 |
|
|
|
メッセージユーティリティの利用方法は下記の通り。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ライセンス |
|
|
|
|
Apache License, Version
2.0 |
|
|
|
Copyright 2011 Akira Isegawa |
|
|
|
Licensed under the Apache
License, Version 2.0 (the "License"); |
|
|
you may not use this file
except in compliance with the License. |
|
|
You may obtain a copy of
the License at |
|
|
|
http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
Unless required by
applicable law or agreed to in writing, software |
|
|
distributed under the
License is distributed on an "AS IS" BASIS, |
|
|
WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. |
|
|
See the License for the
specific language governing permissions and |
|
|
limitations under the License. |
|
|
|
開発者情報 |
|
|
|
|
開発者サイト |
|
|
http://ise-apps-jp.blogspot.com/ |
|
|
|
ブログ |
|
|
|
|
http://a-i-a.blog.so-net.ne.jp/ |
|
|
|
連絡先 |
|
|
|
akira.isegawa@gmail.com |
|
|
|
改定履歴 |
|
|
|
|
v0.10 |
新規作成 |
|
|
v0.11 |
バグ修正 |
|
|
FW_CommonDataAccessorのFW_CommonDataAccessorIF_getEndRow関数について、 |
|
|
最終行取得処理の開始位置を修正。 |
|
|
|
|
|
以上 |
|
|
|
|
|
|
|
|
|
|