Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 – 変数宣言

Excel VBA VBA
スポンサーリンク

変数宣言ってそもそも何?

まず一番やさしく言うと、変数は「データを入れておく“名前付きの箱”」です。
そして 変数宣言 は、その箱を「これからこういう用途で使います」と VBA に正式に伝える行為です。

人間側の感覚で言えば、

  • 「このマクロの中で『合計』という名前の箱を使うよ」
  • 「この箱には“数値”だけを入れるつもりだよ」

と、あらかじめ宣言しておくイメージです。

VBA にとっては、

  • どんな名前の変数があるのか
  • その変数にはどんな種類の値が入るのか(数値?文字?日付?)

を知るための、とても重要な情報になります。

ここを丁寧に押さえておくと、後で出てくる「型」「スコープ」「Option Explicit」なども一気につながります。


変数宣言の基本形(Dim の書き方)

Dim の基本構文

VBA で変数を宣言するときは、必ず Dim から始めます。
基本形はこれです。

Dim 変数名 As データ型
VB

例えば、次のように書きます。

Dim count As Long
Dim message As String
Dim price As Double
VB

それぞれ、

  • count という名前の「整数用の箱」
  • message という名前の「文字列用の箱」
  • price という名前の「小数を扱える箱」

を用意している、という意味になります。

宣言した変数に値を入れて使う流れ

宣言しただけでは、まだ中身は「初期値」の状態です。
値を入れるには、= を使って代入します。

Sub Sample()

    Dim count As Long
    Dim message As String

    count = 10
    message = "こんにちは"

    MsgBox "count は " & count & " です"
    MsgBox message

End Sub
VB

ここでの流れは、

  1. 箱(変数)を宣言する
  2. 箱に値を入れる
  3. その値を使って処理をする

という、とてもシンプルなものです。
この「箱を用意してから使う」という感覚が、変数宣言の出発点です。


なぜ「宣言」がそんなに大事なのか

1つ目の理由:VBA に「型」を教えるため

Dim count As Long と書くことで、VBA は

  • count という名前の変数がある
  • それは Long 型(整数)として扱う

と理解します。

これによって、

  • 小数を代入しようとするときに「おかしいよ」と気づいてくれる
  • 文字列を代入しようとするときにエラーになってくれる

つまり、「変な値が入るのを防ぐフィルター」として働いてくれます。

逆に、型を宣言しないと、VBA は「とりあえず何でも入る箱(Variant)」として扱います。
一見便利ですが、後で「思っていた型と違う」バグを生みやすくなります。

2つ目の理由:スペルミスを検出するため(Option Explicit とセット)

Option Explicit を使うと、「宣言していない変数は使えない」というルールになります。
このとき、変数宣言をきちんとしておくと、

  • 変数名を打ち間違えたときにコンパイルエラーで止まる

という大きなメリットが生まれます。

例えば、本当は totalAmount と書きたかったのに、totlaAmount と打ち間違えたとします。
宣言していない名前なので、「定義されていません」と怒ってくれます。

宣言をサボると、VBA は「新しい変数が出てきた」と勝手に解釈してしまい、
気づかないままバグが潜り込む、という最悪のパターンになります。

「変数宣言をする」というのは、
“自分のミスをコンパイル時に見つけてもらうための保険”
でもあります。


よく使うデータ型と宣言の具体例

数値系の代表例

Dim count As Long      ' 大きめの整数
Dim age As Integer     ' 小さめの整数(あまり使わなくてOK)
Dim price As Double    ' 小数を扱う
VB

超初心者のうちは、「整数はとりあえず Long」「小数は Double」と覚えてしまって構いません。
Integer は範囲が狭く、あまりメリットがないので、最初は Long だけで十分です。

文字列・日付・真偽値

Dim name As String     ' 文字列
Dim birthday As Date   ' 日付・時刻
Dim isActive As Boolean ' True / False
VB
  • String は文字列全般
  • Date は日付や時刻(内部的には数値ですが、日付として扱える)
  • Boolean は「はい/いいえ」「真/偽」を表すフラグ

条件分岐(If)と組み合わせるときに、Boolean はとてもよく使います。

オブジェクト型(Range など)

Dim rng As Range
Set rng = Range("A1")
VB

オブジェクト型の変数は、Set を使って代入するのがポイントです。
ここでは詳しくは踏み込みませんが、「Range という“セル範囲オブジェクト”を入れる箱」として宣言しています。

オブジェクト型の変数宣言は、
「この変数は“値”ではなく“何かのオブジェクト”を指すんだな」
という意識を持つきっかけにもなります。


変数宣言の書き方でつまずきやすいポイント

1行に複数書くときの落とし穴

次の2つを比べてみてください。

Dim a, b, c As Long
VB
Dim a As Long, b As Long, c As Long
VB

上の書き方だと、

  • a は Variant
  • b は Variant
  • c だけが Long

という、ちょっと罠っぽい挙動になります。
「最後の変数にしか型がつかない」のが VBA の仕様です。

下の書き方なら、a / b / c すべてが Long になります。

超初心者のうちは、
「1行に1変数」か、「必ず全部に As 型 を付ける」
と決めてしまうのがおすすめです。

宣言の位置:基本は「使うプロシージャの先頭」

最初のうちは、変数宣言は

Sub Sample()

    Dim count As Long
    Dim message As String

    ' ここから下で変数を使う

End Sub
VB

のように、「その Sub / Function の一番上」に書く、と決めてしまってOKです。

スコープ(有効範囲)の話と絡んできますが、
「まずは、そのプロシージャの中だけで完結する変数」として宣言するのが、いちばん安全で分かりやすいスタートです。


例題:変数宣言をしない場合との違いを体感する

宣言なしで書いた場合(悪い例)

Sub NoDeclare()

    total = 10
    toatl = total + 5   ' スペルミス

    MsgBox toatl

End Sub
VB

Option Explicit がない状態だと、VBA は

  • total という変数(Variant)を勝手に作る
  • toatl という別の変数(Variant)も勝手に作る

という解釈をします。

結果として、

  • total には 10 が入る
  • toatl には「初期値 0 + 5」で 5 が入る

MsgBox には 5 が表示されますが、
書いた本人は「15 になるはず」と思っているかもしれません。

しかも、エラーは出ません。
これが一番怖いパターンです。

宣言あり+Option Explicit の場合(良い例)

Option Explicit

Sub WithDeclare()

    Dim total As Long

    total = 10
    toatl = total + 5   ' ここでコンパイルエラー

    MsgBox toatl

End Sub
VB

この場合、toatl の行で「定義されていません」とコンパイルエラーになります。
「変数宣言をしていない名前が出てきた」と、VBA が教えてくれるわけです。

ここで初めて、「あ、スペルミスしてた」と気づけます。

この違いを一度体感すると、
「変数宣言は、未来の自分を守るための仕組みだ」
という感覚が、かなりリアルになります。


超初心者向け「変数宣言」の実践ルール

最後に、今の段階で意識しておくとかなり楽になるルールをまとめます。

  • すべてのモジュールの先頭に Option Explicit を書く
  • 変数は必ず Dim 変数名 As 型 で宣言してから使う
  • 型は「整数なら Long」「小数なら Double」「文字列なら String」くらいから始めれば十分
  • 1行に複数書くときは、必ずそれぞれに As 型 を付ける
  • 宣言は、その変数を使う Sub / Function の先頭にまとめて書く

このあたりを“自分ルール”として固定してしまうと、
変数まわりのバグで悩む時間が一気に減ります。

タイトルとURLをコピーしました