始めてのExcel VBA

Excel のVBA 機能を使えるようにするための最初の設定～Hello, World! の表示までを解説

プログラムを作成するうえで大切なデバッグやエラー処理についても解説します。

ここをおさえておけば自力でプログラムを作成するとき、上手く動かないところがあっても原因箇所を調べたりすることができるようになります。

特に独学で使い始めようとして、初期設定のまま使い始めてエラーメッセージが表示されまくってしまったり、デバッグ作業で心が折れそうになることがあるので、解説の初期設定をしてもらうだけでかなり効率が良くなるはずです。

# 1.開発タブを表示させる
「オプション」→「リボンのユーザー設定」→「開発」にチェックを入れ、開発タブを表示します。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/0f8c51bb-f751-5b61-febe-de1bff76bcd4.png)

# 2.IDEの初期設定
「開発」タブを選択し、「Visual Basic」をクリックしてMicrosoft Visual Basic for Applications(以下 IDE) を表示します。

「ツール(T)」→「オプション(O)...」をクリックします。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/2339efb5-0c2e-ff86-808d-1250b12506d3.png)

設定する項目は、以下の通りです。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/914251d1-bb85-e8d0-37a0-1c12d5a09f04.png)

<Table>
  <caption>オプション</caption>
  <thead>
    <tr>
      <th>タブ</th><th>項目</th><th>値</th><th>説明</th>
    </tr>
  </thead>
  <tbody>
  <tr>
    <td rowspan=2>編集</td><td>自動構文チェック(K)</td><td>OFF</td><td>エラーメッセージうざいのでOFF</td>
  </tr>
  <tr>
    <td>変数の宣言を強制する(R)</td><td>ON</td><td>変数名のTypo を発見しやすくなるのでON</td>
  </tr>
  <tr>
    <td rowspan=2>全般</td><td>エラー発生時に中断(B)</td><td>ON</td><td>エラーが発生した行で止まってくれる</td>
  </tr>
  <tr>
    <td>順次コンパイル(P)</td><td>OFF</td><td>実行前にコンパイルエラーが見つかるようOFF</td>
  </tr>
  </tbody>
</Table>

# 3.ボタンを配置
プログラムを実行する起点となるボタンを配置します。

「開発」タブの「挿入」から「ボタン (フォームコントロール)」をクリックし、シート状でドラッグするとボタンが配置され、「マクロの登録」ダイアログが表示されます。

マクロ名にボタンがクリックされたときに呼ばれる処理の名前(ボタンHelloWorld_Click)を入力、マクロの保存先「作業中のブック」を選択して、「新規作成(N)」をクリックします。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/9e1fa5ba-5494-7884-8cc9-ea4f12be3b51.png)

すると、IDE 画面に標準モジュール(Module1)が追加され、画面のようなコードが生成されます。
標準モジュールのモジュール名は、分かりやすい名前(mdlMain)に変更しておきます。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/25d878ce-6fe9-1398-4b90-e85267da114b.png)

# 4.Hello, World!
実際に、ボタンがクリックされた時の処理を記述します。


```VisualBasic:mdlMain
'スペルミスなどで間違った変数が使われるのを防止するため
'このファイル内で変数の宣言を強制します。
Option Explicit

'ボタンがクリックされるとここに記述された処理が実行されます
Sub ボタンHelloWorld_Click()
    Call MsgBox("Hello, world!", vbInformation Or vbOKOnly, "始めてのプログラム")
End Sub
```
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/ac993f2d-d470-71ce-68c6-1c17a641d3c5.png)

# 5.実行
ボタンをクリックするとプログラムが実行されます。
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/31e9b2f0-2980-ca2c-aaaf-fc1c6b31125d.png)

# 6.デバッグ
プログラムの動作を途中で止めて確認したいときは、赤枠部分をクリックするとブレークポイントを設定することができます。
ブレークポイントをもう一度クリックするとブレークポイントが解除されます。

次の行を実行するときは「F8」キーを押すと現在の行が実行され、次の行へ移ります。
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/ad81c96b-e54e-bf75-efe2-407b6a27705b.png)

デバッグの時には、「表示(V)」→「イミディエイトウィンドウ(I)」を表示しておくと便利です。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/612fe498-27aa-3e6e-d914-190741b80407.png)

```VisualBasic:mdlMain
'指定された値がイミディエイトウィンドウに表示される
Debug.Print "こんにちは"
```
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/2428e7d4-4300-6daf-2b2c-0bf93f619199.png)


# 7.エラーが発生したときにエラーメッセージを表示する
処理の途中で意図しないエラーが発生した時、そのまま処理が進行してしまうとデータを破壊したりする可能性があるため、処理を安全に中断する仕組みが必要です。

VBA ではエラーが発生したとき、指定したラベルに処理をジャンプさせることができます。
```VisualBasic:mdlMain
Sub ボタンエラーテスト_Click()
On Error GoTo Error:
    Dim 配列()  As Long
    '配列は、
    'Dim 配列(1)  As Long
    'のように宣言時に配列数を指定するか
    'Dim 配列()  As Long
    'の後に
    'Redim 配列(1)
    'で配列数を確保する必要がある
    
    '存在しない配列にアクセスしようとすると「9:インデックスが有効範囲にありません。」というエラーが発生する
    配列(0) = 1
    
    Debug.Print "正常終了"
Finaly:
    'ここに正常時でも異常時でも実行する処理を書ける
    Debug.Print "常に実行"
Exit Sub
Error:
    Debug.Print "エラー発生"
    'エラーが発生したときは処理の途中からここにジャンプするので、ログファイルにエラーを出力したり、エラーメッセージを表示する
    Call MsgBox("[" & Err.Number & "]" & vbCrLf & Err.Description, vbCritical Or vbOKOnly)
    GoTo Finaly
End Sub
```

なお、最初に設定したオプション画面で、「エラートラップ：エラー発生時に中断(B)」になっていると、エラーが発生した行で止まるためError: には処理が移りません。
動作を確認するときは、一時的に「クラス モジュールで中断(R)」に変更してください。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527645/d7cb4174-8dde-eb1f-4ac3-ead631a7b5d4.png)

# 8.まとめ
時々、初期設定のままに使っていてデバッグで凄く苦労している人がいるので、オプション画面の設定を変更しておくのは凄くおすすめです。