変数宣言すときは「型」も必ず定義する

VBAって不思議で、変数をちゃんと宣言しなくても、なんとなく動いてしまうことがあります。
でも、初心者がVBAでつまずく原因って、実はこの「なんとなく動く」が生む事故だったりします。
この記事では、型(Long / String など)を定義するメリットと、初心者がまずやるべき最小ルールを、VBAの例でわかりやすくまとめます。
そもそも「型」って何?
型は、かんたんに言うと「その変数に入れる値の種類」です。
- String:文字(例:名前、住所、ファイル名)
- Long:整数(例:件数、行番号、ループのカウンタ)
- Double:小数(例:平均、割合)
- Boolean:True / False(例:フラグ)
- Date:日付(例:締め日、更新日時)
型を決めておくと、「この変数は何を入れるものか」がハッキリします。
型を定義しないと何が起きる?
VBAは、変数の宣言や型の指定を省略しても動くことがあります。
そのとき多くの場合、VBAはその変数をVariant(バリアント)という万能っぽい型として扱います。
Variantは便利です。
でも、初心者が困る原因にもなります。
あるある①:タイポ(打ち間違い)がバグになっても気づかない
型以前に「宣言しない」ことの怖さがこれです。
Sub Sample()
total = 100
toatl = total + 1' ←typo(スペルミス)
MsgBox total
End Sub
これ、エラーにならずに実行できてしまうことがあります。
そして結果は 100 のまま。
なぜかというと、VBAが toatl を「新しい変数」として勝手に作ってしまうからです。
つまりミスがミスとして表に出ない。これが一番怖いところです。
あるある②:文字と数値が混ざって挙動がブレる
Variantは中身に合わせてVBAが自動変換してくれることがあります。
Sub Sample()
Dim v
v = "10"
MsgBox v + 1
End Sub
これ、うまくいけば 11 と出ます。
でも「数字っぽい文字列」だからたまたま計算できただけです。
次のように少しでも混ざると急に落ちます。
Sub Sample()
Dim v
v = "10a"
MsgBox v + 1' 型不一致になりやすい
End Sub
初心者が「昨日は動いたのに今日は動かない…」となりやすいのがこのパターンです。
あるある③:Excelのセルの値は、想像以上に“何でもあり”
Excelのセルには、いろんなものが入ります。
- 空
- 数値
- 文字
- 日付
- エラー(#N/A など)
それをそのまま受け取ると、Variantになりやすいです。
だからこそ、入口ではVariantを使うのはアリです。
ただし、そこから先の「計算」「比較」「処理の中心」は、型をはっきりさせた方が事故が減ります。
型を定義すると、何が良いの?
初心者にとって一番大きいメリットはこの3つです。
1) バグが早く見つかる
型を決めておくと、変な値を入れたときにエラーになったり、違和感に気づけます。
2) 自分のコードが読みやすくなる
「この変数は何?」が減ります。
Dim rowCount As Long
Dim userName As String
Dim totalPrice As Currency
変数名+型で、意図が伝わります。
Excelのオブジェクトが扱いやすい(補完が効く)
特にこれ。
Dim ws As Worksheet
Dim rng As Range
とすると、VBAエディタで候補(メソッドやプロパティ)が出やすくなり、ミスが減ります。
まずやるべき最小ルール:Option Explicit
VBAで「宣言しないと動く」を止めるには、これが最優先です。
Option Explicit
これをモジュールの先頭に書くと、宣言していない変数を使った瞬間にエラーになります。
さっきの toatl みたいなタイポがすぐ見つかります。
さらにおすすめは、VBAエディタの設定で自動化することです。
- VBAエディタ(VBE)を開く
- ツール → オプション
- 変数の宣言を強制 にチェック
これで新しく作るモジュールに Option Explicit が自動で入ります。
初心者向け:迷ったらこの型セットでOK
「全部覚えるの無理…」となるので、最初はこれだけで十分です。
- 整数 → Long
- 小数 → Double
- お金 → Currency
- 文字 → String
- 真偽 → Boolean
- 日付 → Date
- セルの値を受ける → Variant(※入口だけ)
- Excelの部品 → Workbook / Worksheet / Range
実例:入口はVariant、中心は型で固める
セルの値を使って合計を出す例です。
Option Explicit
Sub SumExample()
Dim v As Variant
v = Range("A1").Value' 入口はVariantで受ける
Dim x As Double
If IsNumeric(v) Then
x = CDbl(v)' 数値に変換してから計算する
MsgBox x * 1.1
Else
MsgBox "数値が入っていません"
End If
End Sub
ポイントはこれです。
- 受け取るところはVariantでもいい
- でも計算する前に数値(Double)にする
これだけで「急に落ちる」「結果がブレる」が激減します。
よくある勘違い:Intは“型変換”ではない
初心者が混乱しやすいので一言だけ。
- Int:小数点以下を切り捨てる(整数化)
- CDbl / CLng:型を数値に変換する(変換)
「文字列を数値にしたい」なら、基本は CDbl や CLng です。
まとめ:VBAは動くからこそ、型を定義すると強くなる
VBAは、書かなくても動いてしまうことがあります。
でも、動くコードは「正しく動くコード」とは限りません。
初心者がまずやるべきことはシンプルです。
- Option Explicit を入れる(宣言を必須にする)
- 変数にはできるだけ型を付ける
- セル値などの入口はVariantで受けて、処理前に型に落とす
これだけで、VBAのコードは一気に壊れにくくなります。

