和風スパゲティのレシピ

日本語でコーディングするExcelVBA

変数の宣言を強制(Option Explicit)は必ず設定すべし

Excelマクロを作るとき、コードを書く画面のことをVBEと呼びます。

EはEditorのEで、そのままエディタってことですね。


このVBEはいろいろと設定を変えることができ、

VBE

こんな風に背景色を黒にしたりもできます。


職場でどうしても眠くなって目を閉じるとき、
黒い画面が映っていると熟考してる感が出て便利ですね。


さてこのVBEの設定について、「絶対に」設定すべき項目があります。

それがこちら↓

オプション

変数の宣言を強制する

「変数の宣言を強制する」にチェックを必ず入れておきましょう。


これにチェックを入れると、以降新しいモジュールには、

Option Explicit

が一番上に自動でセットされるようになります。


まずは有無を言わずにこれをつけてください。

  • これを設定するとどうなるか
  • なぜこれを設定するのか

をこれから説明していきますね。



突然ですが以下のコードを見てください。

Sub Test()

    height = 4
    base = 6
    area = base * hieght / 2
    
    MsgBox area

End Sub

MsgBoxに出るareaの値はいくつでしょうか?



正解は「0」です。


4×6÷2 で「12」が表示されそうですが、

よーく見てください。


heightとhieghtの綴りが違うんですね。これ。

heightには4を代入したのですが、
掛け算に使ったhieghtは新しい変数ですので0で計算されたということです。


このスペルミスによるバグを防いでくれるのが「変数の宣言を強制」です。


「変数の宣言を強制」すると、

Option Explicit

Sub Test()

    Height = 4
    Base = 6
    Area = Base * hieght / 2
    
    MsgBox Area

End Sub

と、先頭に「Option Explicit」が付きます。


この状態で実行しようとすると、

定義なしエラー1

と怒られます。


変数を宣言しないと使えなくする設定ですから当然ですね。


では宣言してみます。

Sub Test()

    Dim height, base, area

    height = 4
    base = 6
    area = base * hieght / 2
    
    MsgBox area

End Sub

 
この状態で実行すると…?



定義なしエラー2

教えてくれました!


ということで、変数の宣言を強制する「Option Explicit」さんは、
言い換えれば「自動スペルミス検知器」です。

素晴らしいですね。


これを活用しない手はありませんので、
ExcelVBAを書くときは必ずこのチェックを入れてください。(例外なし)


Dim ○○ って書くのは最初は面倒かもしれませんが、
膨大なコードからスペルミスを探す方がはるかに面倒です。


いや探すのが面倒なだけならまだいいんですよ。


しれっと0で計算してマクロが終了したりすると、
気づかないうちにバグが成果物として提出されます。

その時上司やお客さんに頭を下げるのは、
Dimを書く面倒さを鼻で笑える面倒さですからね。



プログラムのバグは、大きく分けると2種類あります。

  1. バグがあるとエラーで止まる
  2. エラーはでず実行できるが、たまにバグった結果になる

この2つなんですが、どっちが嫌ですか?


どう考えても2がやばいですよね?


初心者のうちは「エラー」って怖いかもしれませんが、
本当に怖いのは「エラーが出ないこと」なんです。


変数の宣言を強制する機能は、変数のスペルミスを1で済ましてくれる機能です。

作るマクロに地雷を設置しないためにも、絶対にこの設定をONにしてください。



なお、変数の「型」に慣れていない方は、とりあえず

Dim height, base, area

のように、Dimに変数名を並べておくだけでいいです。

これでもスペルチェック機能はちゃんと動きます。


慣れてきたら「文字列はString」「整数はLong」「小数はDouble」あたりを勉強して、

Dim height As Double, base As Double, area As Double

と書けるようになるといいですが、それは先の話でも大丈夫です。


まずは変数を必ず宣言する設定をONにして、
変数の宣言に慣れていきましょう。

おまけ:スペルミスを防ぐ方法その2

スペルミスを防ぐ方法としてこんな方法もあります↓

Sub Test()

    Dim 高さ As Double, 底辺 As Double, 面積 As Double

    高さ = 4
    底辺 = 6
    面積 = 底辺 * 高さ / 2
    
    MsgBox 面積

End Sub

母国語を使えば、当然スペルミスは減りますね!


eigh と書いてアイと読む欠陥言語と違って、日本語は「変換」を挟むため、
例えば「たかせ」とタイプミスした場合は「高瀬」が出てきて、
Option Explicitさんより先にIMEさんが間違いを教えてくれます。


プログラミングは英語で書くべしみたいな風潮が昔はありましたが、
今は別にそんなことはありません。(そう思ってる人もたまにいるけど…)

英語の目的は外国人さんとチーム開発をすることなので、
そういうシステム会社さんのプログラマでなければ、好きに使ってOKです。


スペルチェック以上に、母国語を使うとコードの意味をくみ取りやすくなります。


今回のコードが↓

面積 = 底辺 * 高さ / 2

三角形の面積」であることは読み取れていましたか?


そういう意味の汲み取りがプログラミングでは大事ですので、
日常生活でそれが研ぎ澄まされている母国語を、最大限頼っていきましょう。