Visual Basic Editorの使い方

# はじめに
この記事は環境構築とマクロ作成・ユーザフォーム作成時のVBE(Visual Basic Editor)の使い方をまとめたものです。VBEの機能を網羅したものではありません。

# 開発環境の構築
ファイル > オプション > リボンのユーザ設定 の「開発」をチェックしOKボタンを押すとリボンに開発タブが追加される。開発タブの"Visual Basic"を押して以下の画面が表示されれば環境構築は完了です。

![image-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/d0e25bea-6756-a064-6f11-8d3d86c5f948.png)

# VBEの画面構成
VBEの画面は主に下記の３つのウィンドウから構成されます。

1. コードウィンドウ
   - コードを記述するウィンドウ
　
2. プロジェクトエクスプローラ―
    - 現在のモジュール一覧を表示したり、切り替えるウィンドウ
　
3. プロパティウィンドウ
    - オブジェクトのプロパティを表示・設定するウィンドウ
    - ユーザフォームの編集で使うことが多い


![image-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/3bc1f2a5-2f4e-6d9f-4ce6-7c9e7b4264ef.png)

# マクロの作成と実行
## 1. モジュールの挿入
はじめに、挿入タブからモジュールを選択します。
![module.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/7a43cdb4-bc37-55ea-2698-7a76648974e6.png)

各モジュールの使い分けとしては以下のイメージです。
- ユーザフォーム
  - 入力フォームなどの画面作成
　
- クラスモジュール
  - クラスを作成する
　
- 標準モジュール
  - クラスで作る必要がない処理の作成

## 2. コードウィンドウで編集
モジュール挿入後は、プロジェクトエクスプローラ―から作成したモジュールを選択しコードウィンドウで処理を記述します。
![image-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/4b0c7b58-b39f-f1e5-117d-0c2cdf9b3457.png)

## 3. マクロの実行
マクロを実行する場合は、実行したいマクロを選択して実行ボタン(緑の矢印)を押します。
![image-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/c346dd34-77db-77ad-abfd-0be73ed5b741.png)

# ボタンの配置とマクロの対応付け
## 1. ボタンの配置
ワークシートにボタンを配置するには、「開発」タブの挿入からボタンを選択します。
![image-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/4b3a8afb-d0d3-e20c-61a9-b162227f60fe.png)

フォームコントロールとActiveXコントロールの2種類がありますが、調べたところ以下のような違いがあります。とりあえずユーザフォームを呼び出したい場合はActiveXコントロールを使い、それ以外の場合はフォームコントロールを使うという認識で良いと思います。

|                  | フォームコントロール       | ActiveXコントロール             |
| :----------------: | :------------------------: | :------------------------------: |
| マクロの登録方法   | VBAコードなしで登録       | VBAコードを使って登録           |
| 対応するイベント数 | クリックのみ(ボタンの場合) | クリック含む13種類(ボタンの場合) |
| ユーザフォームでの使用 | 不可                  | 可能                          |

詳しくは以下を参照
[ワークシートのフォーム、フォーム コントロール、ActiveX コントロールの概要 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0-%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0-%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB-activex-%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AE%E6%A6%82%E8%A6%81-15ba7e28-8d7f-42ab-9470-ffb9ab94e7c2)

## 2. マクロの登録
フォームコントロールにマクロを登録するには以下のように、配置したボタンを右クリックしメニューから「マクロの登録」を押しマクロを選択すると登録できます。登録後はボタンが押されるとマクロが実行されるようになります。
![image-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/362ce166-3aae-a5f4-3afa-48af624e426c.png)

# 入力フォームを作る
## 1. ユーザフォームを挿入
挿入タブからユーザフォームを選択します。

## 2. コントロールの配置
挿入したユーザフォームを選択すると、以下のような画面が表示されます。
ボタンや入力欄などのコントロールを配置するには画像のツールボックスを使ってコントロールの配置をします。
※ツールボックスが表示されてない場合、表示タブでツールボックスを押すと表示されます。
![image-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/4a0de941-f7cc-cfd3-f60f-f42891872ea3.png)

また配置したコントロールの位置やサイズなどの調整は、コントロールを選択した状態で右クリックして、表示されたメニューから行います。
![image-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/48d6b1ef-9d1e-0e0e-ae34-96aec4a747bb.png)

## 3. イベント処理の記述
コントロールを配置し画面が完成したあとは、各コントロールのイベント処理を記述していきます。イベント処理を記述するには、ユーザフォームの右クリックメニューから「コードの表示」を選択します。
その後、以下の画面のオブジェクトボックスとプロシージャボックスから作りたいイベントプロシージャのオブジェクトとイベントを選択するとイベントプロシージャが生成されます。
生成したイベントプロシージャにイベント処理を記述します。
![image-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/af02d4d8-77fc-0061-a286-70bd1a992a9a.png)

# ワークシートのボタンから入力フォームを表示する
ワークシートにActiveXコントロールのボタンを配置したあと、ボタンを右クリックしメニューから「コードの表示」を押します。
その後、コードウィンドウでボタンが押されたときのイベントプロシージャを生成し、イベントプロシージャ内に以下のように記述することで入力フォームが表示されるようになります。
![image-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540461/dc4049b6-c4ed-be13-9c18-c7f53bf2fdec.png)

# 終わりに(VBE使った感想)
VBEを使った感想としては結構使いにくいなと感じました。
あとVBAマクロを実行すると、「もとに戻す」が使えなくなるのは結構めんどくさいなと感じました。
VBAマクロを実行しても「もとに戻す」が使える方法はないのでしょうか？