変数の宣言の強制について

変数の宣言の強制を行う方法と理由、それの本質的な必要性について

変数の宣言の強制とは、コーディング中に宣言されていない変数の使用を不可にする設定です

宣言していない変数のエラーメッセージ
強制時に発生するエラー

この設定を行うと、宣言されていない変数を使用すると画像のようなエラーが発生します

コンパイルエラーなので、プロシージャの実行前に発生します
ここでOKボタンをクリックすると、対象の変数が選択状態になります

この設定はVBEのオプション設定ではなく、コードを記載することで設定されます

変数の宣言を強制するコード
実際の入力状態

コードは宣言範囲に入力する必要があります
宣言範囲とは、モジュールの最上部になり、画像の様にプロシージャの外側の最上部に記入します

これでこのモジュールでは変数の宣言が強制された状態になります
また、この設定はモジュールごとに必要になるのでシートやユーザーフォームなどにも入力を行う必要があります

全てにいちいち入力するのはめんどうなので、自動入力できる設定が行えます

オプション設定の開き方
設定オプションの場所

まずはオプション画面を開いてください

変数の宣言を強制するオプション設定
設定画面の項目箇所

編集タブの「変数の宣言を強制する」にチェックを入れると、これ以降に作成されたモジュール全てに上記のコードが自動的に入力されます

これ以降に作成されたものなので、この設定前に作成されたものは入力されないので、必要であればコピペして入力を行います

変数の宣言の強制の必要性について

上記の内容で簡単に入力を行うことが出来るようになった変数の宣言の強制ですが、これの必要性について話しておきます

これを使用する理由は、変数名の入力時にタイプミスにより別の変数を意図せず作ってしまい、バグを誘引させる要素を排除するために行います
変数名のタイプミスとは、そのほとんどがスペルミスです

例えば、変数を英単語にすると「variable」です
これを変数名にしたと仮定しますと「Dim variable As String」とまずは変数の宣言を行います

その後コーディング時に変数名を入力しますが、その時にスペルを間違い「valiable」と入力してしまった
そうした場合、変数の宣言の強制を行っていない場合はこのプロシージャでは2つの変数が作成されることになります

1つ目は当然「 variable 」の String 型です、2つ目が「 valiable 」です

そして、この2つ目の変数は宣言が省略されているため変数の型はVariant型になります

これに気付かず1つ目の変数の文字列をいくらコード中に更新しても出力すると更新されない、という結果に陥ります
これを変数の宣言の強制を行うとコンパイル時にエラー表示で教えてくれるので事前に発覚するわけです、なので有用な設定なのです

変数の宣言の強制の本質としての必要性

ここで1つ本質的な話としてですが、これはあくまでもコーディングを行う者にミスを知らせるものであってコーディングの効率を上げるものでも無いし、そもそもミス入力が無ければ必要性は無いように思います

とはいえ、ミスは必ずでます。これはどうしようもありません
ですが、別の方法でもこのミスを無くすことができます

スペルミスによる大きな要因は、英語表記やローマ字表記によるものです

これは日本人である以上、慣れていないんだからミスをするのも当然です

なので日本語を使いましょう、ただそれだけでこのスペルミスは無くなります
さらに言うなら、変数名に日本語を使用すればその単語がすぐに理解できるため、変数の用途説明のコメントを最小限に減らすこともできます

しかし、日本語使用でよく挙がる問題があります
それは、半角全角の切り替えを行わないといけない点です、これはどうしようもないです

ですがここで1つ考えてみてください。
コードの解説であるコメントを入力する際や、メッセージボックスの文章を入力する際に必ず行いますよね?
確かに、この切替操作を全く行わないならそっちが優位です

操作回数が5回より0回は圧倒的に優位ですが、10回と5回では圧倒的に優位とまでは言えません、それほどに0回というのは強みです
これは業務改善を行ううえでも重要な考えです

でも、上記にもあるようにそれは日本語を使う事がある以上不可能でしょう
なので、この半角全角を切り替えるのがわずらわしいという理由は少し乱暴です

変数の宣言時に1度日本語を入力するだけでよければ、あとは半角で問題ない訳です
そのために使用するのがインテリセンス入力です
これはいわゆる予測変換で、メソッド等以外にも変数も使用可能です
そしてこれを有効に利用するために、日本語変数名の前になるべく意味のないアルファベットを入力します。
こんな感じです「Dim gh日本語変数 As String」
頭文字のghにはなんの意味もありません、キーボードで入力しやすい文字でいいと思います

これをしておくとインテリセンス入力が圧倒的に楽になります
というのも、インテリセンスのリストの並びはアルファベット順、次に日本語順となっているので日本語のみだとリストから探すのが大変になりますし、上記の通り半角全角の切り替えを少なくしたいからです

変数のインテリセンス入力画面

画像の様に、「gh」と入力してインテリセンス表示の「Ctrl+Space」でリストが表示されます
あとは選択した項目で「Tab」を押せば入力されます
この方法は、日本語未使用でも利用できるので活用してください

頭文字に意味を持たせないようにと言いましたが、それは変数名にその役割を持たせるべきであってそこに意味を持たせると読み解くのに余計な手間が発生する可能性があるのと、付けるときにいちいち考えるのも面倒です
VBAの定数でも「vb~~」となっているように、全く無意味ではないけどその変数名に対して意味があるわけでは無いようにしたほうが、変数名に集中できます

変数名やプロシージャ名など、日本語が使えるところは積極的に使っていってください。

それがExcelVBAの言語仕様です、開発者は言語仕様を使い切ってください
それがこの言語を作ってくれた人への最大限のリスペクトです

なお、自分は変数の宣言の強制は使用していません
宣言箇所にあれがずっと居座っているのが気持ち悪いし、変数名の入力ミスも上記のようにそもそもタイピング入力しませんのでありません
開発者の意図は分かりませんが、それが標準設定ですしね

ただし、強制しないからと宣言自体を行わないことは絶対にしないでください
これをする人がいるから、この設定が必須と言われてしまいます
変数の宣言の強制設定は強制しませんが、変数の宣言は強制します!

マクロの記録について

マクロの記録の方法とそれを活用したマクロ作成法の解説

マクロの記録とは、通常は操作を記録させてその操作を任意のタイミングで実行する事によって作業の効率化を図るものです

ですが、この操作によって実はVBAコードが作成されています。
そのコードが実行されることで記録した操作を再現しているわけです。

つまり、マクロの記録によって作成されるコードは、Excelの操作ができる人であれば誰でも作成することができることになります
これが、このVBAという言語の習得のしやすさに大きく影響を与えています。
実際自分もこの自動作成されたコードから学習しました

マクロの記録方法

マクロの記録自体は、開発タブから簡単に実行できます

マクロの記録を開始するボタンの説明

マクロの記録の開始には、開発タブの左にある「マクロの記録」ボタンをクリックすることで記録の設定画面が開かれます

マクロの記録の設定画面

設定画面の各項目

「マクロ名」ここに入力した文字列がプロシージャ名になります

「ショートカットキー」画面の通り、Ctrlキーとの組み合わせですぐに実行できるようにできるキーの設定です

「マクロの保存先」モジュールの作成場所の指定です、通常は作業中のブックでいいです

マクロの記録を終了させるボタン

今回はA1からC4までのセルに赤色の背景色を設定する操作を記録します
操作が終わったら、また開発タブに戻って「記録終了」をクリックします

なお、ミス操作をしたり、シートをスクロールする操作も全て記録されるので結果が画像と同じでも作成されるコードに違いがある可能性はあります

しかし、実行後は同じようになるはずです

記録された操作のVBAコードについて

マクロの記録を行った結果のコード

新たにモジュールが作成されていれば、そのモジュールをダブルクリックするとコードウィンドウが開かれます
その中に操作記録されたコードが作成されています

A1からC4を選択して、その選択範囲に書式設定を行っています。
内容に関しては現時点ではわからなくても構いませんが、よくよく1行ずつ読んでいけばなんとなく分かるかもしれません

実際には、行っていない設定もコード上作成されています。

これはこの操作を確実に完了させるため、関係する箇所も合わせて設定を一括で行っているためです

とはいえ、ほとんどの状況においてそれは不要な場合が多いです。
なので不要なコードは削除し必要な箇所だけをコピペして使用します

作成したマクロの利用について

記録したマクロの実行ボタン

作成したマクロを実行するには開発タブの「マクロ」ボタンをクリックします

記録したマクロの実行画面

作成した処理のプロシージャ名を選択して「実行」ボタンをクリックするだけです

マクロの記録は自動的にコードを作成してくれる素晴らしい機能です
また、いちいちヘルプやWebサイトでコード情報を調べたり、覚えておく必要も無く便利です

せっかくこの機能があるのですから、コーディングに際しても最大限利用してください。

マクロの記録だけで処理は作れないし、無駄が多いので使わないほうが良いという意見もありますが機能は使いこなしてなんぼです
マクロの記録のコードまるまるコピペやんこれ、と思われてもちゃんと機能使ってますけど何か~?ぐらいの気持ちでいいかなと思います
結局Webサイトからコピペするもの同じですしね(あ、このサイト・・・)

VBEの設定変更

VBEの画面でプログラムを作成する際に行っておくと便利な設定の解説

VBEの設定は標準でもあまり問題ありませんが、少し手を付けてあげると使いやすくなることもあるので、ここでは自分の行っている設定を紹介していきます

コード文字の設定

実際にコードを記入して処理を作成していく上で、使用PCの解像度にもよりますがそのままの設定では、見づらいかもしれません
文字の種類やサイズを変更すると見やすくなります
また、コードにはそれぞれ種類がありますのでその種類に応じた色も任意に変更できます

VBEのオプションの開き方

まずは、ツールタブからオプションを選択してください

VBEのコードの文字設定

次に表示されたウィンドウから、「エディターの設定」タブを選択してください
ここにある設定がコードの文字の内容です
自分が行った設定でいうと、まず左の「コードの表示色」です
ここがコードの種類に応じた色の設定ですので、ここを任意に変更します。変更したのは、「コメント」と「キーワード」の2つだけです。それぞれ初期設定では文字色が設定されていますが、それを文字色は自動にして背景を元々の色に設定しています。なぜなら、文字色がそれぞれの色だと見づらかったので背景色にしています
次に行っているのは、文字の種類を見やすい「Meiryo」にしています。
このサイトの文字もそれにしています。PCの画面では非常に見やすいフォントなのでおすすめです。ついでに文字サイズも少し大きくしておけば見やすくなりますが、あまり大きくするとコードの可読性が落ちるのでほどほどで

ツールバーのコマンド追加

VBEのツールバーの設定の開き方

次にツールバーの設定変更を行います。ツールバーのどこでもいいので右クリックするとメニューが表示されるので「ユーザー設定」を選択してください

VBEのツールバーでコマンドを挿入する方法

表示されたウィンドウのコマンドタブから好きなコマンドを探して、コマンド名をドラッグすればツールバーに追加できます
初期でだいたい揃っていますが、おすすめはインデントとコメントの設定を行うボタンです。特にコメントは複数行をまとめて一気に変換できるので作業がはかどります。

その他として

プロジェクトの階層表示の切り替え方法

プロジェクトの階層一覧の表示方法です
自分はすべてが表示されているほうが見やすいので、「フォルダーの切り替え」ボタンをクリックして一覧表示にしています。初期設定では種類ごとにフォルダで分割されています。

モジュールが最大化されていない時

あと、画像の様にモジュールが最大化されていない状態もあったりしますので、この場合は最大化ボタンを押せば全てのモジュールのコードウィンドウが最大化に固定されますので行っておいてください

プログラムの入れ物を作る

モジュールの作成解説とSubプロシージャの空コード

'プログラムコードの入れ物
Sub プログラム名()

’↑この間にプログラムコードを入力する↓

End Sub

Subプロシージャという、VBAの最小プログラム単位の作成です。
このSub ~ End Subまでの間に実行するプログラムコードを入力します
VBAはこのプロシージャという単位でプログラムが実行されます
また、Subの隣の「プログラム名」は任意の名称に変更してください
日本語の使用が可能です

まずは、標準モジュールの作成を行います。この標準モジュールに通常はプロシージャの作成を行っていきます。
この標準モジュールは、メニューボタンから簡単に作成可能です。

標準モジュールの作成手順

ツールバーにある「新しい標準モジュール」をクリックすると、下のプロジェクト内に新しく「Module~」と作成されます
ツールバーにボタンが無い場合は、挿入タブから操作してください

Subプロシージャの作成手順

モジュールが作成されると、そのモジュールがアクティブになって右側のウィンドウにコードウィンドウが表示されますので、そこに例コードを貼り付けします。
これで、プログラムの入れ物が完成しましたので処理の作成を行っていきましょう

VBAを使用できるようにする

ExcelでVBAを使用できるようにする設定の解説

Excelで開発タブを表示する

Excelの初期設定では、VBAを扱うことができませんので、設定を変更する必要があります。これに関してはもちろんVBAで行うことはできませんので、必ず手動で行う必要があり、オプション設定から行います
これはバージョンによって微妙な違いがあるので注意してください
基本的に2007以降はリボンというメニューが追加されたため、全て開発タブの表示が必要になります。2003以前はこの設定はありません

Excelのオプションの開き方
開発タブの表示設定

Excelのオプションから「リボンのユーザー設定」を選択し、その中から左のリストにある開発タブのチェックボックスにチェックを入れてOKボタンをクリックすれば完了です
開発タブが表示され、その1番左の「VisualBasic」から開くことができます
ショートカットキーは「Alt+F11」です。これはVBEの画面とExcelの画面を交互に切り替えることができます

開発タブが表示されている状態

セキュリティの設定

マクロ無効時の警告メッセージ

また、マクロのセキュリティ設定も必要な場合は行います
信頼済みになっていないブックでは画像の様に警告が表示されてマクロが無効の状態でブックが開かれます
2010以降は一度マクロを有効にすると、自動的に信頼済みに登録されます。 この際に登録されるのはファイル名なので、ファイル名を変更すると再度警告が表示されます
また、ネットワーク上にあるファイルを開いた場合は、自動的に登録はされずメッセージが表示されますので、登録しても問題なければそのまま登録してください
ただ当然ですが有効になるのはそのPCだけなので、逆に一時的に開くだけなら有効にして登録はキャンセルして使用することもできます

セキュリティのレベルの設定も行うことができますが、これはあまり変更することはお勧めしません
特に2010以降は自動的に登録されていくのでそれほどストレスなくマクロブックを扱えるはずです

Excel2007でのマクロ無効時の警告メッセージ

画像はExcel2007での警告時のものです。2007以前では、毎回有効化する必要があり面倒です
その場合は信頼できる場所という設定がありますので、そちらを設定してください
この設定は2010以降も同様に行えます

セキュリティセンターの開き方

オプションの「セキュリティセンター」を選択し、右下の「セキュリティセンターの設定」をクリックします

信頼できる場所の追加方法

次に「信頼できる場所」を選択し、「新しい場所の追加」をクリックします

信頼できる場所のサブフォルダの設定

開いた画面で指定の場所の絶対パスを入力します
この時に、サブフォルダーも含めるとこのフォルダ以下の全てのフォルダが信頼できる場所に登録されます

信頼できる場所のネットワーク上の設定

また、ネットワーク上のフォルダを指定するには「プライベートネットワーク上にある信頼できる場所を許可する(推奨しません)」にチェックを入れます
推奨されてません、2010以降の自動登録はできるんやけどね

特に2003以前は信頼できる場所が決まっていたので、非常にセキュリティ設定が面倒でした。さらに推奨されませんが、自分の作ったものしか使わない場合はセキュリティレベルを「低」にしてましたね

Excel2003でのマクロセキュリティの設定

ツールタブの中のマクロから「セキュリティ」を選択する

Excel2003でのマクロセキュリティレベルの設定

すでに2003を使える環境になく、以前撮っておいた画像でしたが、やはり「低」です。当時はどれほどのことをVBAで出来るのか分かってなかったので安易に行ってましたね、怖い

マクロ有効ブックについて

ここまでの操作でとりあえず処理作成の準備は整いました。あとは処理を作成していくだけですが、最後に重要な点です
Excel2007以降はセキュリティ強化のためにファイルの拡張子が変わりました。それに伴いマクロが入ったものと、入っていないもので拡張子が違います
ファイルを開く前にマクロが入っているか分かるようになっているのです
そして、これは保存形式にあてはまりますが、標準の形式ではマクロは保存されない仕様になりましたので、保存する際にはマクロ有効ブックで行う必要があります

マクロ有効ブックでない時の警告

画像の様に標準形式でマクロ有効ブックを保存しようとするとメッセージが表示されます。このメッセージを「はい」を選択してしまうとあなたの作ったマクロはこの世から消えてしまいます
Excel2003から移行してすぐの頃、これに一体何度泣かされたか分かりません。作成最初に名前を付けて保存する癖を付けてからはありませんが、初心者の方は本当に気を付けてください。この「はい」は本当に恐ろしいです・・・