vbaのアドインを作成する

# はじめに
VBAについて調べてみると、作成から適用までの簡単なサンプルを交えた手順がなかなか見つからなかったため、VBAで作業効率化をしたときにアドイン化する手順をまとめます。
正直VBAのサンプルは難しいのが多いので、最も簡単なサンプルで作成してみました。

# 手順一覧
1. エクセルでVBA開発を有効にする。
2. マクロの記録をして、作成したいVBAのたたき台を作成する。
3. 記録したマクロを改造する。
4. 改造したマクロをテストする。
5. アドインとして保存する。
6. リボンとして登録する。

# 手順詳細
## 1.エクセルでVBA開発を有効にする。
タブのファイルを選択して一番左下あたりにあるオプションを選択します。

<img width=50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/d46888b7-cd01-062e-68bc-e8c71095a64d.png">
<img width=50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/95b4f63f-8d9e-fe8c-c171-5c0c481a6d88.png">

リボンのユーザー設定タブを選択して開発タブのチェックを入れます。

<img width=90% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/7e1c0a74-4233-0f8f-a0fe-010539f8d575.png">


## 2.マクロの記録をして、作成したいVBAのたたき台を作成する。
タブの開発が増えているため、開発タブを選択してマクロの記録を選択します。
<img width=80% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/0461c8b9-88d8-e3ab-6b48-2ca5a56497d1.png">

ウィンドウが出ますがそのままで良いです。

### 作成したいVBAの動きを実際にする。
エクセルの画面を使用して普通にVBAの踏み台となる動作をしてください。今回は、セルの結合をしました。

マクロの記録を終了する。
<img width=80% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/f1b62fad-573a-bbc6-9f47-8c48e90ba1cb.png"> 


## 3.記録したマクロを改造する。
リボンのVisualBasicを選択する。
標準モジュールを開いてModule1を選択します。
<img width=30% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/8e1e7acf-f985-a354-f812-2cdfd9371828.png">


実際にマクロを改造します。
Module1を選択して出てきた画面に2.で出たウィンドウのマクロ名と同じ名前(デフォルトはMacro1)で既にVBAが作成されていますので、それを改造していきます。
今回は、セルの結合でやったため次のようなVBAが作成されています。

``` vba
Sub Macro1()
    Range("A1:B1").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
End Sub
```

この状態ではRangeで囲まれたA1～B1までしか結合できないため、クリックしたセルを結合できるようにします。

``` vba
Sub Macro1()
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
End Sub
```

セルを複数選択してから上のマクロを実行してみてください。結合できるはずです。
``` Range("A1:B1").Select ```を消すだけでできました。
このままでは普通に用意されているセルの結合と変わらないため、もう少し改造します。
次は、セルの結合後に中央そろえにならないようにしてみます。

``` vba
Sub Macro1()
    With Selection
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
End Sub
```

セルを複数選択してから上のマクロを実行してみてください。結合後の文字が左揃えでできるはずです。
``` .HorizontalAlignment = xlCenter ```を消すだけでできました。
次にセルの色を変えてみます。

``` vba
Sub Macro1()
    With Selection
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
        .Interior.Color = RGB(0, 176, 233)
    End With
    Selection.Merge
End Sub
```

セルを複数選択してから上のマクロを実行してみてください。結合後のセルが色付きで結合されました。
``` .Interior.Color = RGB(0, 176, 233) ```を追加するだけでできました。

このように自動的に作成されたVBAを改造するだけでも色々なことができます。

自動的に作成されたVBAでもたまに非効率的なことをしているため、慣れてきたらそれぞれの意味を調べてみてください。上の例でいうと``` .MergeCells ```を```True```にすると```Selection.Merge```が不要になるなどです。


## 4.改造したマクロをテストする。
上でも実行してみてくださいと記載していましたが、基本的に作成できたらテストをしてください。
テスト方法はリボンの実行ボダンを押すだけです。
デバックが必要ならブレイクポイントもはれます。

<img width = 50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/140f9062-6b74-151e-380e-6962f2dac019.png">

## 5.アドインとして保存する。
アドインとして保存するときは、Ctr + sでファイル保存のウィンドウを開いて、ファイルの種類をExcelアドインにして保存するだけです。

<img width = 50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/3d7d71b7-613a-4467-e776-7498ee16f55a.png">

他の人に共有するときはこのファイルを他のPCの同ディレクトリに格納するだけで共有できます。


## 6.リボンとして登録する。


### 保存したアドインを有効にする
このままでは、VBAを使えないため、アドインを有効にします。
新しくエクセルを開いて、1.エクセルでVBA開発を有効にする。と手順でオプションを開いてください。

アドインタブを選択して、アクティブでないアプリケーションアドインの先ほど保存したアドイン名を確認してください。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/eb2c0a08-e223-06ec-54a6-03d9c518f5d9.png)

下の設定ボタンを押すとアクティブにするアドインを選択できるので、保存したアドイン名を選択してOKを押してください。
<img width = 50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/77b729ee-4294-3b37-1ee1-75a67396b0a3.png">


### 保存したアドインをリボンに設定する。
次は利用しやすいように、リボンに登録します。

1.エクセルでVBA開発を有効にする。と手順でリボンのユーザー設定タブを開いてください。

右のリボンのユーザ設定のメインタブ内のVBAを紐づけたいタブを選択して新しいグループを選択してください。
<img width = 50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/96e16cb6-0203-2543-2c83-01005cfd41d8.png">

コマンドの選択でマクロを選択して、作成したVBAを選択して追加してください。
<img width = 80% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/5ea9bdd0-8c70-f4bb-88a9-92fe22b98dff.png">

これでリボンに追加されているはずなので実際に押して試してください。
<img width = 80% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481713/02a51e2c-b881-7b7f-158d-4cb43eb3b4dc.png">

## おわりに
今回はVBAについて記載しました。
仕様書の形式が多様化してきていますが、まだまだエクセルの仕様書を書くことが多いと思います。そのため、容易にエクセルの操作を自動化できるVBAがサクッと作れたら単純な作業から解放されます。個人的にはVBAは作業効率化の手段として割り切っているため短時間でできる自動化しか目指していませんが、人によってはがっつり時間をかけて全自動化しているのかもしれません。