VisualBasic for Applications


Excel、WordなどMicrosoft製のビジネス用アプリOfficeスイートをマクロ操作するための言語がVBAです
次期不明ながらマクロ開発言語にJavaScript実装が予定されています
外部ツール(PyXLL、XLWings)を使えばPythonでの開発も可能です

エディタ、実行環境

VisutalBasicEditor(VBE・ALT+F11起動)のみです

エディタ(VBE)の使い勝手をカスタマイズ

VBAでのコメントアウトは行頭にシングルコーテーション(’)付与
コメントアウトをVBEではコメントブロックと言います
コメントブロックはVBEではツールメニューボタンでしか実装されてないため
作成時の簡便性がありません。そこでショートカットを付与します。

コメントブロックのショートカット付与

 1.ツールバーオプションから「ユーザ設定」を選択
 2.ユーザ設定内のタブ「コマンド」内のボタン「コマンドの配置の変更」を選択
 3.「コマンドの配置の変更」からラジオボタン「ツールバー」を選択
 4.プルダウンから「編集」を選択
 5.コントロール欄「コメントブロック」を選択状態にし、
  ボタン「選択したボタンの編集」のプルダウンメニューを開き、
  「名前」欄のテキストボックスに「(&/)」を末尾に追記
  「イメージとテキストを表示」または「テキストのみ表示」にチェックを付ける
  この後は閉じるを押下してVBEメイン画面に戻ります

 ・注意点は5.のテキストを表示を選択設定することです。
  イメージを表示を選択するとせっかく設定したショートカットが
  なぜか有効になりません。

 ・(&キー)はALT+キーで実行できます。(入力文字は半角)
  上述では/を例にしましたが好きなキーを設定できます。

記述

 VBAには次の記述方法があります。
sub subprocedure_name(){ } サブプロシージャ―(メイン処理)
function function_name(byVal, byRef){ } ファンクション(関数)
property (Get/Set/let)property_name list_name as type プロパティー(アクセサ、コンストラクタ)
Public/Private/Friend/Static スコープ(Public、Staticは省略可能)

クラス

 VBAのクラスはファイル(cls)を生成することで作成できます
 (JavaのようなClass~という記述はありません)

VBA独自モジュール

 ワークブック、ワークシート毎にVBAを設置し、開いた時、閉じた時を
 トリガーにして発動させることができます
 ユーザフォームモジュールは、入力や表示のモーダルを作成することができます。
 ユーザフォームもアクションをトリガーにして動作するプロシージャを切り替えができます。


データベース

 DB接続は、ライブラリを使用します。
 主にADOを使用します。(ほかにRDO、DAOがあります)
 ライブラリは標準で読み込みされてないため、VBEの「参照設定」で
 設定する必要があります
  参照設定でチェック印つけるもの
   Microsoft Active Data Objects x.x Library
   Microsoft Office xx.x Object Library
  2つ目のOffice Object Libraryも設定するのはVBAでADO読込設定
  するときに必要なためです。
  一般利用者にVBA付きExcelを配布するときは一般利用者に
  参照設定を設定してもらう必要がなくなります。

参照設定

 主に次のライブラリをおすすめします
 (必須ではありません。必要時のみ設定で構いません)
   Microsoft Forms x.x Object Library
   Microsoft ActiveX Data Objects x.x Library
   Microsoft Scripting Runtime
   Microsoft VBScript Regular Expressions x.x
   Microsoft Office xx.x Object Library

テスト

 OSSであるテスティングツールは以下がある。
   VBAUnit http://wiki.c2.com/?VbaUnit
   VB Lite Unit https://sourceforge.net/projects/vb-lite-unit/
   xlUnit https://archive.codeplex.com/?p=xlvbadevtools
 しかし何れも2014年頃にメンテナンスが止まっており
 参考程度にしか使えそうにない。(本当ならMSが率先してやるべき)

 次のサイトはテストは自作になるが参考になる良記事
 [VBA Functionプロシージャの動作をテストするコード - t-hom’s diary]
 (https://thom.hateblo.jp/entry/2016/02/28/182648)


コーディング規約

 MS公式のVBAコーディング規約はありません。
 有志の方が例として挙げているので、これを叩き台にして自身や自社・自部署の規約を策定するといいでしょう。
[エクセルVBAコーディングガイドライン【随時更新】]
(https://tonari-it.com/excel-vba-coding-guide-line/)
[Excel VBAコーディング ガイドライン案 - Qiita]
(https://qiita.com/mima_ita/items/8b0eec3b5a81f168822d)
[VBA コーディングガイドライン - You.Activate]
(http://www.thom.jp/vbainfo/codingguideline.html)

備考

上記でエディタはVBEのみ、と記しました。
有志の方が「Text Scripting on VBA」を作成しGithubで公開されています。
[GitHub - tcsh/text-scripting-vba: Modules for text scripting on VBA]
(https://github.com/tcsh/text-scripting-vba)
[Try #008 – VBAのモダンな開発環境を構築してみた | dayjournal memo]
(https://day-journal.com/memo/try-008/)
現在でも利用できるようですが2013年のものでその後のメンテナンス等は
行っておられないようなので、使用時には注意が必要です。

その他

 以下はあくまで著者個人の考えです。
 VBAは思い立ったらその場で作成し、作成したプロシージャ等はその場でbas、clsファイルとしてエクスポート。
 エクスポート時、オブジェクト名を付け忘れないように。
 何故エクスポートしておくか?ですが、社内でVBA付きExcelは割と忌み嫌われます。そこでVBAをbas,clsで外だししておくと、xlsx形式Excelでもbas, clsファイルをインポートすればVBAが使え、保存するときはVBA無しで保存すれば通常のxlsx形式で保存できるため、他の方からの苦情を受けずに済みます。
 VBAを利用するメリットは自身の作業効率化です。可能な限り上手く利用するのが吉です。

 またネットにあるものをそのままコピーして利用する場合、利用規約やライセンス規約に注意が必要です。もし規約の規定が無ければコードの一番上部にURLと作者名をコメントブロックで書いておくことです。

 将来実装予定のJavaScriptの詳細は不明です。nodeやwebpackが使えるとなると便利にはなりますがモジュール管理に注意を払う必要がでてきそうです。

 なぜそうしてまでExcelを扱う必要があるのか。バグトラッカーや管理ツールは幾らでもあるのに。そう思う人は多いと思う。でも実際の現場はExcel依存から脱却できておらず、また過去資産を使い続けたい場合もあり、嫌がおうにも使わざるを得ない。VBAを使って数々の事務作業を簡素化するにはVBAを使えるようになっておくことは必要。
最終更新:2019年01月21日 02:30