VBAで推奨の設定項目

Excel VBAにて私が設定している内容を記載します。
これを設定することでかなり使いやすくなるのではないでしょうか。

# 変数強制宣言
必須といっていい項目です。
これを行うことで、変数のスペルミスとかを防ぐことができます。
ツール→オプションより**変数の宣言を強制する**のチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/88de33b1-5b16-61b1-c1ac-f00a961cf397.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/673f67a7-1b69-5e29-3e5a-b0bc3c5d149f.png)


# 自動構文チェックなし
エラーのたびにメッセージが表示されるのを防ぎます。
毎回メッセージが表示となると作業効率が落ちてしまいます。
こちらは**自動構文チェック**のチェックを外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/6e7aa626-2437-19d3-b6fd-2e1c0af33e76.png)

# 自動メンバー表示、自動クイックヒント、自動データヒント
こちらについてはチェックを入れておいた方がいいのですが、
デフォルトでチェックが入っているため、基本的には気にする必要はないかと思います。
※設定箇所は上記と同様にオプションで設定します。

# 色
デフォルトのコードの色が見にくいため、変更しています。
これは好みになるかとは思いますが、私は[こちら](https://www.sejuku.net/blog/111660)に記載の色を丸々パクらせていただいております。
なお、フォントについてはメイリオがいいと書かれているサイトも見受けられましたが、
個人的には日本語のコメントにてインデントにずれが生じてしまったため、
**MSゴシック(Japanese)** を使用しています。

:::note info
ExcelによってはJapaneseの所が日本語になっている場合があります。
:::


# コメントアウト
1行・複数行まとめてコメントアウト(VBE上ではコメントブロックと表記されます)ができます。
メニューバーの表示→ツールバーより編集にチェックを入れることで編集のツールバーが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/56b13d02-e05d-6afd-28b5-d96506daf14f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/4cce60ab-97bb-6892-a69b-c66f7614f4a6.png)
上記画像の赤枠で囲ったところがコメントアウトの個所となります。
左がコメントアウトで、右がコメントアウト解除になります。
コメントアウトしたい箇所を選択してコメントアウトのボタンを押すと
対象個所がコメントアウトされます。
ただし、毎回ボタンを押しに行くのは面倒なので、私はショートカットキーを割り当てています。
以下に方法を記載します。

メニューバーの表示→ツールバーよりユーザー設定をクリックし、ユーザー設定を表示させます。

:::note info
ユーザー設定の表示のさせ方はほかにもツールバーの右端の下三角マークから表示させることもできます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/1ce8ad79-01df-2178-7b05-dacc3d795a99.png)
ツールバータブのショートカットメニューにチェックをいれてショートカットメニューを表示させておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/6235b0d0-32d8-b143-86bc-32394201edb6.png)
コマンドタブの編集より**コメント ブロック**を、
ショートカットメニューのコードウィンドウ→コードエディタウィンドウから任意の個所に**ドラッグアンドドロップ**します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/9d83fb00-1684-6b9d-6c51-29c2c9ff458b.png)
すると、**コメント ブロック**が追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/e1c00f78-5de7-57dc-9a92-d0e49d626af0.png)
同様に、**非コメント ブロック**も追加を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/3d00126b-d7e1-64a5-bc83-47f76402cd3d.png)
今度は追加した方のコメント ブロックを右クリックし、名前の個所の末尾に **(&/)** を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/bb9ef0c1-8a8e-6eb9-3354-bad383c961b4.png)
同様に非コメント ブロックに対しても、名前の個所の末尾に **(&\\)** を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/c5504548-cc20-0d1c-c5f6-66c013ea68af.png)
今度はコードエディタウィンドウ(中断)にたいしても同じ事を繰り返します。
これは、ブレイクポイントとかで一旦マクロが中断した際に表示される項目が別になっていて、そちらも設定が必要なために行います。
こうすることで、右クリックしたときにコメント ブロック、非コメント ブロックが表示され、かつショートカットキーが割り当てられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/59d0945d-0cba-3dd2-de2e-baff82267191.png)
つまり、対象範囲を選択し、右クリックから/でコメントブロック、\で非コメントブロックができるのです。
キーボードによってはアプリケーションキーというものが存在し、それを使うことで右クリックの代用となり、
アプリケーションキー→/キーだけでコメントアウトができてしまうので大変楽になります。

:::note info
アプリケーションキーとは下記画像のようなマークのキーで、キーボードの右下、Ctrlキーの左隣りに大体存在しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/d1435225-bd1e-736e-59e0-49c5a0d8c851.png)
:::

今回は/と\キーをショートカットとして割り当てていますが、
&の後ろの文字を別の文字に変えればその変えた文字がショートカットキーとして割り当てられますので、
変更したい場合は対象個所を変更してください。

:::note info
アプリケーションキーと同じ動作をするのには、Shift+F10がありますが、
あまりショートカットキーとしては実用的ではないため、こちらは個人的には非推奨です。
:::

なお、グループの始まりにチェックを入れると、対象個所の上に区切り線が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/03de3283-0ed9-4b12-69cb-a015dc0acbe6.png)
この辺は好みになるかと思いますので、自分のやりやすいように設定を行ってください。

アプリケーションキーがないキーボードの場合は、アプリケーションキーの代わりにAltキーを設定することができます。
先ほどと同様にユーザー設定を表示させた状態かつツールバーに編集が表示されている状態で、
編集のツールバーのコメントブロックを右クリックし、名前を **(&/)のみ** にして、
イメージとテキストを表示にチェックを入れると、Altキー+/でコメントアウトができます。

:::note info
末尾に(&/)があればその前に文字があってもいいのですが、
見た目上長くなってしまって見づらくなってしまうので、推奨しません。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/aea70784-ba9f-2051-9728-e1f3a6108d9e.png)
同様にして非コメントブロックに対しても行えばAltキーでの代用の設定は完了となります。

# rubberduck
静的解析だったりリファクタリングだったり色々使える機能があるソフトになります。
詳細は[こちら](https://qiita.com/mima_ita/items/3629006163d0a7fa6e55)の記事で詳しく書かれていますので、
こちらでは詳細は割愛させていただきます。

一つ注意点として、
アドオンが有効になっているとそのアドオンのVBAコードも対象にしてしまうので、注意が必要です。

# レジストリ

:::note warn
レジストリの操作は慎重に行ってください。
万が一OSが起動しなくなる等の不具合が発生することがありますので注意が必要です。
:::

VBEの設定については下記レジストリに設定が反映されていますので、
対象のレジストリをエクスポート→インポートすることで、他のExcelへ設定のコピーが容易に行えます。

```txt
HKEY_CURRENT_USER\Software\Microsoft\VBA\バージョン
```

:::note info
バージョンについてはExcelのバージョンとかによって異なってきますので、
レジストリエディタ(regedit.exe)等で値の確認を行ってください。
:::

インポート・エクスポートについてはMSの公式サイトにありましたので、そちらを参照ください。

https://support.microsoft.com/ja-jp/topic/windows-%E3%81%A7%E3%83%AC%E3%82%B8%E3%82%B9%E3%83%88%E3%83%AA%E3%82%92%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%81%8A%E3%82%88%E3%81%B3%E5%BE%A9%E5%85%83%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-855140ad-e318-2a13-2829-d428a2ab0692#ID0EBD=Windows_10

なお、設定はユーザー毎で異なりますので、
ユーザー毎にログインしてレジストリのインポートを行う必要があります。

ですが、新規作成ユーザーの場合は
Defaultユーザーのレジストリにインポートしてあげることで、
自動で設定を行うこともできます。

まず、エクスポートした.regファイルの
**HKEY_CURRENT_USER**
を
**HKEY_USERS\TEMP**
にすべて置換し保存します。

次にコマンドプロンプトを管理者権限で実行し、
下記コマンドを実行します。
※C:\users\defaultの個所はDefaultユーザーのフォルダーパスになりますので、変更している場合は適時読み替えてください。

```bat
reg load "HKEY_USERS\TEMP" "C:\users\default\NTUSER.DAT"
```

このコマンドはdefaultユーザーのHKEY_CURRENT_USERのレジストリをHKEY_USERS\TEMPとしてロードするコマンドになります。
この状態で変更した.regファイルでインポートを行えばDefaultユーザーに設定が適用されます。

インポートが終わったら下記コマンドにてアンロードします。

```bat
reg unload "HKEY_USERS\TEMP"
```

:::note info
TEMPの個所は他の文字へ自由に変更が可能です。
:::

# まとめ
以上がVBAの推奨設定となります。
これでVBAの開発がより楽になることでしょう。

# VBA開発における推奨の本

最後に、私が読んでみて良いと思ったVBAの本を紹介します。

### ExcelVBAを実務で使い倒す技術

https://www.amazon.co.jp/ExcelVBA%E3%82%92%E5%AE%9F%E5%8B%99%E3%81%A7%E4%BD%BF%E3%81%84%E5%80%92%E3%81%99%E6%8A%80%E8%A1%93-%E9%AB%98%E6%A9%8B%E5%AE%A3%E6%88%90/dp/4798049999

この本はVBAの作法的なことが書かれている本となります。
きれいに・わかりやすくコードを書くための情報満載です。
VBAを使う人であれば1度は読んでおいた方がいいと思う本です。

### リーダブルコード

https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655

この本はVBAの本ではないのですが、
コードを書く人であれば必ず読んでおくべき本です。
コードの書き方について、命名規則など、いかに読みやすいコードを書くかに注力した本となっていて、
VBAのコードを書く際にも通ずるところが多く見られます。


### 文法系の本について

文法の本についてはとくにお薦めというのはありません。
ネットで検索すれば情報はたくさん出てきますし、
分厚めの本を購入しておけば大体は網羅されていて、
そこまで差はないかと思いますので、
自分の使っているExcelのバージョンに適合しているか、
パット見(書店での立ち読み、Amazonとかでの試し読みなど)で見やすいか等を要素に決めればいいかと思います。