VBAの使い方

VBAは「Visual Basic for Applications」の略で、Officeのプログラミング機能である。 Excelのマクロやユーザー定義関数(自作関数)を作ることができる。

準備

新しいExcelブックを開き、「Excelマクロ有効ブック」として保存しておく。

Excelマクロ有効ブック


VBAプログラムを書くために、VBE(Visual Basic Editor)を起動する。 VBEは、開発タブ(前頁参照)の「Visual Basic」ボタンを押すか、または Alt+F11キーを押すと起動する。

VisualBasic


VBEが起動した(このウィンドウのことを「VBAのウィンドウ」と呼ぶこともあるようだ)。

VBA


左上の「VBAProject(ファイル名)」を右クリック → 挿入 → 標準モジュール

標準モジュール作成


「Module1」という名前の標準モジュールが作られ、「Module1」のウィンドウが開いた。
これで準備完了。Module1のウィンドウ内にプログラムを書いていく。

Module1


マクロの作成

メッセージボックスに「hello, world」と表示するマクロを作成する。
Module1のウィンドウの中に、次のプログラムを入力する。 2行目はTabキーで字下げする。

Sub HelloWorld() MsgBox ("hello, world") End Sub

HelloWorld


Excelのウィンドウでマクロを確認すると、「HelloWorld」という名前のマクロができている。

マクロ


このマクロを実行すると、メッセージボックス(小さなウィンドウ)が開き、そこに「hello, world」と書かれている。

マクロの実行


メッセージボックスは「OK」を押すと閉じる。


VBAプログラムの書き方

プログラムは様々な規則(文法という)に従わなければならない。
Excelマクロのプログラムはこのように書くが、


【書き方】
 Sub マクロ名()
  本文
 End Sub

これは
  1. 「Sub」で始まり「End Sub」で終わる
  2. 「Sub」の後ろに空白を挟んでマクロ名を書く
  3. マクロ名の直後に空白を入れず丸括弧を付ける
等の規則に従っている。
先ほどのプログラムをもう一度見てみると、これらの規則に従っていることが分かる。
Sub HelloWorld() MsgBox ("hello, world") End Sub
この例では「HelloWorld」がマクロ名であり、規則に従って直後に丸括弧が付いている。 この例では本文が「MsgBox("hello, world")」の1行だけであるが、複数行にわたって書くこともできる。 「MsgBox」は、メッセージボックスを開くようExcelに指示する命令文であり、直後の丸括弧の中にメッセージを書く。 メッセージが文字列の場合は、その文字列をダブルクォーテーション「""」で挟まなければならない。 この例では「hello, world」がメッセージである。

プログラムは原則として半角で書かなければならない。 空白も含めて半角である。 ただし、マクロ名やメッセージの文字列など、例外的に全角が許されている部分もある。

もう一つプログラムを書いてみよう。

Sub HelloHelloHello() MsgBox ("Hello!") MsgBox ("Hello!!") MsgBox ("Hello!!!") End Sub

2つ目のプログラム


1つ目のマクロの下に2つ目のマクロを書くと、間に自動的に横線が引かれる。
このプログラムには、MsgBoxで始まる命令文が3つ書かれている。 このように、プログラムの本文には複数の命令文を書くことができる。 複数の命令部を書く場合は1行につき1つの命令文を書く。 命令文が3つある場合は3行に分けて書くことになる。 また、3行とも同じ幅だけ字下げして書くようにする(これは規則ではないが、守るべき「作法」とされている)。
Excelで確認すると、2つ目のマクロができている。

2つ目のマクロ


実行してみよう。 メッセージボックスに「Hello!」と表示される。
OKを押して閉じると、間髪入れず次のメッセージボックスが現れ「Hello!!」と表示される。
これもOKを押して閉じると、さらに次のメッセージボックスが現れ「Hello!!!」と表示される。

1つ目のメッセージボックス
   ↓
2つ目のメッセージボックス
   ↓
3つ目のメッセージボックス


このように、プログラムに複数の命令文を書いた場合は、複数の命令が同時に実行されるのではなく上から順番に1つずつ実行される仕組みになっている。


セル操作

ここからは、○列のセルを操作するマクロを「例○_□□□」という名前にする。

セルへの入力
【書き方】Cells(行番号,列番号).Value = データ
Excelのセル番地は列行の順だが、Cellsでは(行,列)の順であることに注意。 また、列番号はアルファベットではなく数値である。
Sub 例A_セルへの入力() Cells(1, 1).Value = "おはよう" 'セルA1に「おはよう」と入力する。 End Sub

セルへの入力
なお、上記のプログラム例中の緑字の部分は「コメント」と呼ばれるもので、 プログラムとしては無視される部分である。 プログラム中にアポストロフィー「'」を書くと、そこから右側の文末までがコメントとなる。 コメントは無視されるので、基本的には何を書いてもよい。 そのため、メモを書く機能としてよく使われる。
VBEではコメントが自動的に緑字になるが、この教材ではこれ以降は緑字にしないので「'」を見て判断すること。



セル値の取得
【書き方】Cells(行番号,列番号).Value
取得した値は他の関数等で使うことができる。 (次の例では取得した値をメッセージボックスに表示している)。
Sub 例B_セル値の取得() MsgBox (Cells(1, 2).Value) 'セルB1の値を取得してメッセージボックスに表示する。 End Sub
セルB1に「はい!」と入力した後でマクロを実行した例:

セル値の取得
セルB1の「はい!」を取得し、それをメッセージボックスに表示している。


セルの塗りつぶし
【書き方】Cells(行番号,列番号).Interior.Color=RGB(赤,緑,青)
色は三原色の明るさ(0〜255)で指定する。
Sub 例C_セルの塗りつぶし() Cells(1, 3).Interior.Color = RGB( 0, 0, 0) 'セルC1を黒にする。 Cells(2, 3).Interior.Color = RGB(255, 0, 0) 'セルC2を赤にする。 Cells(3, 3).Interior.Color = RGB( 0,255, 0) 'セルC3を緑にする。 Cells(4, 3).Interior.Color = RGB( 0, 0,255) 'セルC4を青にする。 Cells(5, 3).Interior.Color = RGB( 0,255,255) 'セルC5をシアンにする。 Cells(6, 3).Interior.Color = RGB(255, 0,255) 'セルC6をマゼンタにする。 Cells(7, 3).Interior.Color = RGB(255,255, 0) 'セルC7を黄にする。 Cells(8, 3).Interior.Color = RGB(255,255,255) 'セルC8を白にする。 End Sub

セルの塗りつぶし



プログラムの書き方の規則は他にもたくさんある。 プログラムは全ての規則を守って書かなければならない。 初心者にとって、プログラミング学習の半分は規則の学習であると言ってよい。