DRYにExcelを活用するためのVBAの基礎知識

この記事を読むのに必要な時間:およそ 3 分

VBAの用意

既定の状態では,Excelの開発者サポートメニューは無効になっています注1⁠。したがって,最初に行うことは,リボンに[開発]タブを表示することです。

注1
メニューに表示されていなくても,Alt+F11でVBAのIDEを表示できます。しかし,リボンに[開発]タブを表示しておいたほうが,あとあと便利です。

リボンに[開発]タブを表示するには,以下の手順で行います。

  1. Officeボタン(左上の丸いボタン)をクリックして,表示されるメニュー右下の「Excelのオプション」をクリックして,⁠Excelのオプション」ダイアログを表示します。
  2. 「基本設定」から「⁠⁠開発]タブをリボンに表示する」にチェックを入れてOKをクリックします図1

図1 ⁠Excelのオプション」ダイアログ「基本設定」

図1 「Excelのオプション」ダイアログ「基本設定」

以上で,リボンに[開発]タブが表示されます図2⁠。

図2 ⁠開発]タブ

図2 [開発]タブ

リボンの[開発]タブの最左のアイコン(Visutal Basic)をクリックすると,VBAのIDEが起動します図3⁠。

図3 VBAのIDE

図3 VBAのIDE

このIDEの中で,以下の作業が行えます。

  • コードの編集とソースレベルデバッグ
  • フォームのデザイン

また,作成可能なVBのソースファイルは,モジュール,クラス,フォームの3種類です。

標準モジュール
関数やグローバル変数を定義するために利用するソースファイル
クラスモジュール
メソッドとインスタンス変数を持つ,文字通りクラス用のソースファイル
ユーザフォーム
ポップアップウィンドウのGUIによる表示定義とイベントハンドラ用のソースファイルの組み

これらは,ウィンドウ左上のプロジェクトエクスプローラで,右クリックし,コンテキストメニューの「挿入」を選択することで,Excelブックに追加できます。

詳細については,実際のプログラミングで必要になった時点で説明をつけ加えます。

なお,Excelを始めとしたMS Officeのオブジェクトモデルのリファレンスは,MSDNで参照できます注2が,VBAというプログラミング言語の仕様については,Officeのヘルプファイルをインストールしなければ参照できません。ただし,http://msdn.microsoft.com/en-us/library/aa338033(VS.60).aspxから参照できるVisual Basic 6.0ランゲージリファレンスのFunctions(関数)とStatements(ステートメント)はVBAでもほとんどそのまま利用できます。

注2
http://msdn.microsoft.com/ja-jp/library/cc427100.aspxはOffice XP用ですが,Office 2007でも同じように利用できます。

VBの基本的な文法

ここでは,以降で掲載するリストを読むのに最低限知っておいたほうがよい文法についてのみ説明します。個々のステートメントや関数については,リストで利用した時点で説明します。

VBは,大文字,小文字を区別しません
ステートメントなどは,IDEが必要に応じてキャピタライズするので,すべて英小文字で入力すれば問題ありません。
ステートメントは,改行または,:で区切ります
ただし,: を使って1行に複数のステートメントを記述することは,行うべきではありません。
VBは,「関数(Function)」と,「サブルーチン(Sub)」を厳密に区別します
関数: 値を返す
サブルーチン: 副作用を利用する

以降,⁠関数」という表記は両方を示します。それぞれについてはFunctionまたはSubと表記します。また,呼び出し時は,Functionについては関数名の後ろに「()」を記述し,サブルーチンについては「()」を記述しません。

関数パラメータの扱い
既定では,VBの引数は参照(アドレス)が渡されます。値を渡すには,ByValキーワードで仮引数を修飾します。
代入
VBで変数に値を代入するには,COMのオブジェクトについてはset,それ以外についてはlet(ただし省略可能)を利用します。Schemeなどの代入(set)と変数束縛(let)とキーワードは同じですが,異なる意味です。
継続行
VBで行を継続するには,⁠_」を利用します。
文字列の結合
VBの文字列結合には,⁠&」を利用します。Javaと同様に,文字列以外の型のデータについては暗黙の型変換が行われます。
基本は関数
VBはオブジェクト指向プログラミング言語ですが,文字列はプリミティブです。そのため,文字列の長さを求めたり,部分文字列を取り出したりするには,関数を利用します。
変数のスコープ
VBの変数には,大域変数(関数外で宣言)とローカル変数(関数内で宣言)の2種類のスコープがあります。ブロックに相当するスコープはありません。
アクセス指定
VBの関数は,PublicキーワードまたはPrivateキーワードを関数定義に前値することで可視性を指定できます。
Excelブックから実行する関数は,Publicかつ無引数に設定する必要があります。ただし既定ではすべてPublicとなるため,直接実行しても意味がない無引数のサブルーチンにはPrivateをつけてください。そうでないと,Excelからマクロを実行するときに,無意味にマクロ名がリストボックスに表示されてしまいます。

まとめ

この記事では,ExcelでVBAを使うための最初の一歩に相当する部分を説明しました。

VBAは,筆者が普段使っているRubyやC#やJavaに比べると,悲しいくらい冗長で,低機能なプログラミング言語です。しかし,簡単にフォームを使うことができ,インテリセンスを利用してルーズにExcelのオブジェクトを操作するコードを記述でき,しかも,文書と統合できるというメリットがあります。

特にExcelで文書を作る必要がある開発者であれば,VBAを覚えておくと,きっと良いことがあります。つまり,まあ,文書作成の自動化ということです。

それに,エンドユーザコンピューティングという観点からの「良いプログラミング言語」というものを学習することもできるかも知れません。その学習結果を何に,どうフィードバックするかは自分で考えるべき問題です。

では,ハッピーOfficeライフを。

著者プロフィール

arton

artonは,垂直統合型システムベンダーに勤務するソフトウェアエンジニアです。最近,名刺の肩書が「コンサルタント」になって、ちょっと混乱しています。困ったものです。Officeで好きなツールはPowerPoint,嫌いなツールは校正ありに設定したOffice:macのWord,2007では大好きなカイル君の不在が嘆きの種ですが,リボンのおかげでExcelがそれなりに使えるようになったのでまあいいかな,というところです。

バックナンバー

プログラミング