(1)リボンの[開発]タブを有効にする方法
ExcelでVBAを利用するためには,リボンに
開発タブが表示されている必要がある.しかし,デフォルトでは開発タブが有効になっていないため,リボンには表示されていない.ここでは,手動で開発タブを有効にする手順について説明する.
- ① リボン上の任意の位置でマウスの右ボタンをクリックし,図1-1に示すメニューウィンドウが表示されたら「リボンのユーザー設定」を選択する.
図1-1
- ② 図1-2に示すダイアログボックスが表示されたら,右側の「リボンのユーザー設定」で「メインタブ」を選択する.
図1-2
- ③ 「開発」のチェックボックスをオンにする.
(すでにチェックされていればそのままでよい)
- ④ [OK]ボタンをクリックする.
- ⑤ リボンに「開発」タブが表示される.
(2)セキュリティレベルの設定
- ⑥ 実行できるマクロと実行の条件を指定するため,図1-3に示すリボンの「開発」タブを選択する.
図1-3
- ⑦ 「開発」タブの「マクロのセキュリティ」 ボタンをクリックすると,図1-4に示す「セキュリティセンター」のダイログボックスが表示される.
- ⑧ 「マクロの設定」を選択する.
- ⑨ 「警告を表示してすべてのマクロを無効にする」を選択する.
(通常,この設定がデフォルトになっているので,確認すればよい)
- ⑩ [OK]ボタンをクリックする.
図1-4
- (注1)セキュリティの手段として,マクロを既定のExcelファイル形式 (.xlsx) に保存することはできない.マクロは,特別な拡張子 .xlsm を持つファイルに保存する必要がある.
- (注2)マクロを含むブックを開いたときにリボンとワークシートの間に「セキュリティの警告: マクロが無効にされました」というバーが表示される場合は,「コンテンツの有効化」ボタンをクリックしてマクロを有効にする.
ExcelからVBAを記述するためには,
Visual Basic Editor (VBE) を使用するのが一般的である.ここでは,このツールの起動方法について説明する.
- ① VBEを起動するためには,図1-5に示すExcel画面において,リボンの「開発」タブをマウスを用いて選択する.
図1-5
- ② 左端部の「Visual Basic」を選択する.このとき,図1-6に示されるVBEのウィンドウが表示される.ここで,画面左上のウィンドウはプロジェクトエクスプローラで,左下のウィンドウはプロパティウィンドウである.
図1-6
- (注)具体的にコードを記述するのは,次の1-3節で説明するコードウィンドウに対してである.
(1)コードウィンドウの表示
プログラミング言語「VBA」を記述するためにモジュール表示領域に「コードウィンドウ」を表示する必要がある.コードウィンドウの表示方法にはいろいろあるが,「
プロジェクトエクスプローラ」からマウスでオブジェクトを選択しダブルクリックするのが簡単である.ここでは,オブジェクトとしてWork Bookを選択する場合について説明する.
- ① 「1-2節」の手順①②にしたがってVBEのウィンドウを表示する.
- ② 図1-7に示すように「This Work Book」をダブルクリックしてWorkBookに対応するコードウィンドウを表示する.
図1-7
- ③ 図1-8左に示すようにコードウィンドウのオブジェクトボックスから「Workbook」を選択する.
- ④ 図1-8右のようにプロシージャボックスの表示が[Open]に変わり,コードウィンドウに図のようなステートメントが表示される.
図1-8
- (注)図1-8に示す「Workbook_Open」は,Workbookが開かれたときに,Sub~End Subに記述されたプログラムが実行されるプロシージャである.
(2)プログラムの作成
(1)コードウィンドウの表示
Sheet1を用いてプログラムを作成する場合について説明する.
- ① 「1-2節」の手順①②にしたがってVBEのウィンドウを表示する.
- ② 「プロジェクトエクスプローラ」でマウスにより「Sheet1」をダブルクリックすると,図1-12のようにモジュール表示領域にSheet1に関するコードウィンドウが表示される.
図1-12
- ③ 図1-13上段に示すようにコードウィンドウのオブジェクトボックスから「Worksheet」を選択すると,図1-13下段のようにプロシージャボックスの表示が "SelectionChange" に変わり,コードウィンドウに図のようなステートメントが表示される.
図1-13
(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)コマンドボタンの作成
ボタンを作成して処理を行う方法を説明する.
- ① リボンから「開発」タブを選択し,左端の「Visual Basic」を選択する.
- ② メニューが表示されるので,図1-17のように「デザインモード」を選択する.
- ③ さらに「挿入」を選択する.
図1-17
- ④ 図1-18のように,「コントロールボックス」が表示されるので,下段の「ActiveXコントロール」の中からから,「コマンドボタン」をマウスで選択する.
図1-18
- ⑤ このときマースカーソルは「+」となっている.マウスボタンが押されていない状態で,マウスをワークシート上に移動し,適当な位置でマウスの左ボタンを押したまま移動させることでボタンを作成することができる.図1-19はCommandButton1が作成された状態の図である.
図1-19
(2)コマンドボタンのプロパティ
ボタンのCaptionを変更したい場合の操作方法を説明する.
- ⑥ 作成したCommandButton1にマウスカーソルを移動し,右クリックすると,図1-20に示すメニューが表示されるので,メニューから「プロパティ」を選択する.
図1-20
- ⑦ 図1-21に示すように,CommandButton1に関するプロパティが表示されるので,「Caption」を選択して変更する.その他,ボタンに関する様々な情報をここで編集することができる.
図1-21
- ⑧ 図1-22に示すように,「Caption」を「データ分析」に変更する.この時,ボタンのCaptionが,
変更される.
図1-22
(3)プログラムの作成
コマンドボタンに発生したイベントに応じて,処理を行うプログラムを作成してみよう.
表1-2は,CommandButtonのイベントの種類である.デフォルトは,「Click」で「オブジェクトをクリックしたとき」に設定されている.
表1-2 CommandButtonのイベント
| イベント | 発生するタイミング |
| BeforeDragOver | ドラッグ&ドロップ操作の実行中 |
| BeforeDropOrPasete | データを貼り付けるかドロップしようとしたとき |
| Click | オブジェクトをクリックしたとき |
| DblClick | マウスボタンを2回クリックしたとき |
| Error | コントロールにエラーが検出された際,エラー情報が返せないとき |
| GotFocus | コントロールがフォーカスを受け取ったとき |
| KeyDown | キーを押したとき |
| KeyPress | 文字キーを押したとき |
| KeyUp | キーを離したとき |
| LostFocus | コントロールがフォーカスを失ったとき |
| MouseDown | マウスボタンを押したとき |
| MouseMove | マウスボタンを動かしたとき |
| MouseUp | マウスボタンを離したとき |
- ⑨ 作成したCommandButton1にマウスカーソルを移動し,右クリックすると,図1-23に示すメニューが表示されるので,メニューから「コードの表示」を選択する.(作成した「コマンドボタン」をマウスの左ボタンでダブルクリックしてもよい.)
図1-23
- ⑩ 図1-24に示すコードウィンドウが表示される.
図1-24
- (注)デフォルトのイベントは「click」で,マウスボタンがクリックされると,図1-24に示すSub と End Sub の間に記述された処理が実行される.
- ⑪ 図1-25に示すプログラムを入力する.このマクロは,ボタンが押されるとセルA3の値がセルB3に表示されるプログラムである.
図1-25
- ⑫ デザインモードを終了し,セルA3に値を入力した後,ボタンをクリックすると,セルA3の値がセルB3に表示される.
VBEはインテリジェントエディタであるため,括弧を忘れるなどの簡単な文法エラーは,入力時にチェックされ,
図1-26のように,エラーが発生した行が赤文字で表示される.
図1-26 
一方,実行時にならないと現れないエラーもある.このようなエラーを見つけて修正する作業を
デバックと呼んでいる.実際のプログラム作成では,このようなエラーやロジック的なエラーを見つけることの方が困難である.以下の手順でこのエラーへの対応方法に対する説明を行う.
- ① 「1-5節」で示した①~⑪の手順で,正常に動作するプログラムを作成する.
- ② 図1-25にように正常に動作するプログラムを,図1-27に示すように修正する.このプログラムの2行目のRangeの範囲が「3」となっており誤りである(正しくは「B3」).
図1-27
- ③ デザインモードを終了し,セルA3に値を入力した後,ボタンをクリックすると,図1-28のメッセージボックスが表示されるので,「デバック」ボタンをクリックする.
図1-28
- ④ コードウィンドウにおいて,エラーの行が図1-29のように,黄色の網掛けで表示されるので,誤りを見つけて修正する.この例の場合は,図の「3」を「B3」に修正する.
図1-29
- ⑤ エラーを修正後,図1-29に示す「クリアーボタン」をクリックする.
- ⑥ ③の操作により,再度,ボタンをクリックして実行する.
- ③~⑥の操作をエラーが無くなるまで繰り返す.
(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)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" を表示するプログラムを作成する.