2014/09/14 このエントリーをはてなブックマークに追加 はてなブックマーク - 【まだVBAで消耗してるの?】Excelツールテンプレートパターンを考えてみた(Excel VBA Tools template)

【まだVBAで消耗してるの?】Excelツールテンプレートパターンを考えてみた(Excel VBA Tools template)




ツールのテンプレートパターンを考えて書いてみた。パターン考慮して汎用的なツールも作った。
https://github.com/yyYank/yank/tree/master/Recursivive


VBAでなんかツールを作りたい人
プロジェクトでツール作りそうな人


VBAの規約に関しては別エントリ参照。
VBAでツールを作るにあたって、
今まで現場で個人的に色々とツールを作ってきた(自主的にまたは作らされた)経験から
見てきたパターンを明文化しようというのが今回の試みです。





VBAのExcelマクロツールでは以下の機能が備わっていれば、大体のものは作成可能。

  • バリデーション
  • ディレクトリ参照(ファイルエクスプローラ呼び出し)
  • ファイル操作(IO系)
  • ->txt入出力、csv入出力、xls入出力、再帰処理
    ※ファイルのコピー、削除に関してはVBAの標準で充分。
    ○ファイルコピー
    FileCopy "コピー元", "コピー先"

    ○ファイル削除
    Kill "ファイル名"

  • ロギング
  • DBアクセス




  • 大体は、以下の3系統に分類される。

    1.一括処理系

    再帰処理による横断的な処理
    (各xlsブックの値の抽出、変更、削除、入力チェックなど)

    これについては、ある程度汎用的に利用出来るVBAコードを書いた。
    コードの内容に関しては別エントリで説明する。

    2.自動生成系

    設計書を元にソースを自動生成、または
    別の設計書を生成。
    (結構ツライ出来栄えになる事が多い。)



    3.DB処理系

    データ抽出、テーブル作成、データ作成など。




    基本パターンは以下の4ステップである事が多い。

    1.ディレクトリまたはファイルの指定(エクスプローラ呼び出し->ファイル or ディレクトリ指定)
    2.バリデーション(入力チェック、ファイルの存在チェック)
    3.対象ディレクトリまたはファイルに対して処理を行う。
    4.出力(ファイルに結果を出力)






  • ツールのxlsブックへの依存を最低現にする(セルの値参照を多用しない、xlsブックのセキュリティレベルを変更しない、など)
  • 関数やエクセルの標準機能で完了する処理をマクロで行わない
  • ->COUNTIF、IF、VLOOKUPでなんとかなるもの。データのソート、フィルタリング、レイアウトの調整、条件付き書式など
  • オーバーロードはVBAにないので、必要に応じてOptionalとParamArrayの使用を検討する。
  • DRY(Don't Repeat Yourself)





  • VBAでツールとして各プロジェクトで作成されることが多いと思われるものをまとめました。
    つまり、上記の内容さえ網羅してしまえば、
    「どのプロジェクトでもほぼ通用する」ということです。

    そして、私作りました。ファイルの再帰処理に特化したAOP(風)のツールです。

    Recursivive<-これ。

    再帰処理に特化したツールです。DB機能は未実装なんですが、ファイルの再帰処理、入出力、ロギングまではまとめてあります。ロジックと今回紹介したテンプレート処理の分離が設計思想です。
    詳細は別エントリで。


    各地で車輪の再発明が繰り返されているのだろうなぁ。
    なるべくならし無い方が良いですよね。そのための資料になれば幸いです。
    この内容をまとめることによって個人的には備忘録になるのでどのプロジェクトに行っても困りません(笑)













    0 件のコメント:

    コメントを投稿