1.プログラム開発環境


1-1 初期設定

(1)リボンの[開発]タブを有効にする方法
 ExcelでVBAを利用するためには,リボンに開発タブが表示されている必要がある.しかし,デフォルトでは開発タブが有効になっていないため,リボンには表示されていない.ここでは,手動で開発タブを有効にする手順について説明する.

(2)セキュリティレベルの設定

1-2 VBEの起動

 ExcelからVBAを記述するためには,Visual Basic Editor (VBE) を使用するのが一般的である.ここでは,このツールの起動方法について説明する.

1-3 Work Bookでコーディング

(1)コードウィンドウの表示
 プログラミング言語「VBA」を記述するためにモジュール表示領域に「コードウィンドウ」を表示する必要がある.コードウィンドウの表示方法にはいろいろあるが,「プロジェクトエクスプローラ」からマウスでオブジェクトを選択しダブルクリックするのが簡単である.ここでは,オブジェクトとしてWork Bookを選択する場合について説明する.

(2)プログラムの作成

1-4 Work Sheetでコーディング

(1)コードウィンドウの表示
 Sheet1を用いてプログラムを作成する場合について説明する.
(2)イベントプロシージャ
 イベントプロシージャのプロシージャ名はイベントの対象となるオブジェクト名(ここではWorksheet)とイベント名(ここではSelectionChange)をアンダースコア(_)で区切った形式で決定される.Worksheetには,表1-1に示すように9つのイベントが用意されている.
表1-1 Worksheetのイベント
イベント発生するタイミング
Activateオブジェクトがアクティブになったとき
BeforeDoubleClickワークシートをダブルクリックしたとき
BeforeRightClickオブジェクトを右クリックしたとき
Calculateワークシートの再計算後
ChangeセルもしくはValueプロパティの値が変更されたとき
Deactivateオブジェクトが非アクティブになったとき
FollowHyperlinkワークシートのハイパーリンクをクリックしたとき
PivotTableUpdateピボットテーブル レポートがワークシート上で更新された後
SelectionChangeワークシートの選択範囲を変更したとき

 プログラムは,表のイベントが発生すると実行される."SelectionChange"がデフォルトとして選択されているので,必要に応じて,図1-14のように,プロシージャボックスから選択すればよい.
図1-14

1-5 ボタンで操作

(1)コマンドボタンの作成
 ボタンを作成して処理を行う方法を説明する.
(2)コマンドボタンのプロパティ
 ボタンのCaptionを変更したい場合の操作方法を説明する.
(3)プログラムの作成
 コマンドボタンに発生したイベントに応じて,処理を行うプログラムを作成してみよう.表1-2は,CommandButtonのイベントの種類である.デフォルトは,「Click」で「オブジェクトをクリックしたとき」に設定されている.

表1-2 CommandButtonのイベント
イベント発生するタイミング
BeforeDragOverドラッグ&ドロップ操作の実行中
BeforeDropOrPaseteデータを貼り付けるかドロップしようとしたとき
Clickオブジェクトをクリックしたとき
DblClickマウスボタンを2回クリックしたとき
Errorコントロールにエラーが検出された際,エラー情報が返せないとき
GotFocusコントロールがフォーカスを受け取ったとき
KeyDownキーを押したとき
KeyPress文字キーを押したとき
KeyUpキーを離したとき
LostFocusコントロールがフォーカスを失ったとき
MouseDownマウスボタンを押したとき
MouseMoveマウスボタンを動かしたとき
MouseUpマウスボタンを離したとき

1-6 実行時エラーが発生した場合の処理

 VBEはインテリジェントエディタであるため,括弧を忘れるなどの簡単な文法エラーは,入力時にチェックされ,図1-26のように,エラーが発生した行が赤文字で表示される.
図1-26
 一方,実行時にならないと現れないエラーもある.このようなエラーを見つけて修正する作業をデバックと呼んでいる.実際のプログラム作成では,このようなエラーやロジック的なエラーを見つけることの方が困難である.以下の手順でこのエラーへの対応方法に対する説明を行う.

1-7 VBAプログラムの書き方

(1)プロシージャ
 VBAにはサブルーチンプロシージャ関数プロシージャの2つの基本プロシージャがある.サブルーチンプロシージャはSub~End Subで構成されており,関数プロシージャは,Function~End Functionで構成されている.
 (サブルーチンプロシージャ)
Subプロシージャ名(仮引数)
 (プロシージャ本体)
End Sub
 (関数プロシージャ)
Functionプロシージャ名(仮引数)
 (プロシージャ本体)
End Function
 これらの,プロシージャの詳細は,6章7章において解説する.
(2)コメント
 コメントはプログラムの説明などいわゆる注釈として用いるもので,プログラムの実行に対して何の影響も与えない.'(シングルクォーテション)の後ろに書かれた文字はコメントと見なされる.コメントは,制御文や実行分の後ろに記述することも可能である.
 (プログラム例)
' この行はコメント
A = 3.14*b ' ここからコメント

(3)継続行
 1つの処理を複数行に分けて記述することができる.この場合,分ける元の行の末尾にスペースと_(アンダースコア)をつける.

 (プログラム例)
a = (b + 3) _
 * 3.14 _
 + 1.414

このプログラム例は,a=(b+3)*3.14+1.414 を3行に分けてコーディングした例である.

(4)マルチステートメント
 1つの行に:(コロン)で区切って複数の文(処理)を記述することができる.

 (プログラム例)
a = b+3 : c = b-3 : d = b*3

1-8 セルへの入出力

(1)Range
 Rangeを使用してセルの位置を指定する場合,行と列名でセルを指定する.例えば,文字列 "A3"はA列の3行のセルを意味する.
 (行と列名でセルを指定)
Range(" 行と列名の文字列 ").Value
プログラム例1-1は,セルB3に ABCという文字列を表示するプログラムである.一方,セルC2に書かれているデータの読み込む場合は,プログラム例1-2のようにコーディングする.(変数に関しては2章参照)
 (プログラム例1-1)
Private Sub CommandButton1_Click()
 Range("B3").Value = "ABC"
End Sub
 (プログラム例1-2)
Private Sub CommandButton1_Click()
 num = Range("C2").Value
End Sub

(2)Cells
 セルから値を読み込んだり,値をセルに表示する場合,Rangeと同様に,Cellsプロパティを用いてセルの位置を指定し,値を取得したり,あるいは値を表示することができる.指定方法は以下のとおりである.
 (行と列の位置でセルを指定)
Cells(行番号,列番号).Value
プログラム例1-3は,プログラム例1-1をCellsにより書き直したプログラムである."B3"はB列,3行目であるので,2列3行と考えることができる.行と列の関係に注意されたい.同様に,プログラム例1-2をCellsで書き直したものがプログラム例1-4である.
 (プログラム例1-3)
Private Sub CommandButton1_Click()
 Cells(3,2).Value = "ABC"
End Sub
 (プログラム例1-4)
Private Sub CommandButton1_Click()
 num = Cells(2,3).Value
End Sub
 RangeとCellsの関係は以下のとおりである.
Cells(行番号,列番号)=Range(セル名)

(3)format関数(4章を参照)
 Rangeを使用してセルの位置を指定する場合,数値を文字列として扱わなければならないことがある.例えば,A3はA列の3行目であるが,行数がループ変数の値に応じて変わるような場合はループ変数の値を文字列に変換して位置を指定する.このような整数値を文字列に変換する関数にformat関数がある.
 (Format関数)
Format(数値)
 Format関数では,式を指定した書式に変換し,その文字列を示すバリアント型(内部処理形式 String の Variant)の値を返す.例えば,Format(5)とすれば,文字列の5(数値ではなく)が返される.列の記号にこの文字列を加えあわせれば,新たな文字列を作成することができる.

プログラム例1-5:セル(A1)に “A”と数値の5を文字列の5に変換し,それを加えた(文字列の加算)値 "A5" を表示するプログラムを作成する.