【VBA】変数宣言とデータ型を理解する(Dimステートメント)

VBA

VBAにおける変数の活用事例について、こちらの記事で解説しましたが、

今回の記事では、実際に変数を使うための手順を解説します。手順を説明するうえでのポイントは「変数宣言」です。さらに「変数宣言」は「Dimステートメント」「変数名」「データ型」に構成要素を分解できますので、それぞれについて詳しく解説していきます。

変数宣言とは

変数宣言とは、「この名前の変数を、これからこういう型で使います」とAccessのVBAに伝える作業です。

伝える内容(宣言内容)は、主に次の3点です。

  1. 変数の適用範囲 → この変数の有効範囲は〇〇ですよ
  2. 変数名     → 変数の名前は〇〇ですよ
  3. 変数のデータ型 → この変数に格納できる値は〇〇ですよ 

この記事では、特に2及び3を深堀し、1についてはこちら↓の記事をご覧ください。

変数宣言を行うことのメリット

実は変数宣言を行わなくても変数を使用することは可能です。

それでもわざわざ宣言を行うのは、メリットがあるからです。主なメリット3点を解説します。

  • 誤った型のデータを代入するのを防ぐ
  • 変数名のスペルミスを早期に発見できる
  • 実行速度が向上する(型が明確なため)

誤った型のデータを代入するのを防ぐ

例えば、 生年月日を格納する birthDate という文字列型の変数があったとします。通常であれば YYYY/MM/DD 形式の日付データを格納したいところですが、文字列型であれば、あらゆる文字や形式で自由に格納できるので、 2025/13/32 のような明らかに不正な入力もエラーとして検出できません。

birthDateのデータ型を 日付型に設定することで、物理的に日付として認識できるデータしか格納できなくなり、 2025/13/32 と入力した場合は、日付形式として認識されないためエラーとなります。同様に、 数値型 の変数には漢字やひらがなといった数値以外の文字は格納できませんし、 通貨型 のフィールドには整数値のみが許可され、小数点を含む値は格納できません。

このように、あらかじめ変数宣言をしておくことで、意図した値を正しく格納することができます

変数名のスペルミスを早期に発見できる

たとえば userName という変数を宣言したのに、どこかで userNmae と誤って書いた場合、宣言がないとエラーにならず別の変数として扱われてしまう危険があります。宣言しておけば「未定義の変数」としてエラーが表示され、スペルミスに気付くことができます。

実行速度が向上する(型が明確なため)

変数宣言により変数のデータ型を明示しない場合、その変数のデータ型はVariant型となります

Variant型はどんな値でも格納できる便利な型ですが、処理能率が劣る面があります。VBAはデータ型が明確な変数に対して最適化された処理を行います。特に大量ループ処理や計算処理では、Variant型よりもデータ型を明示した方がパフォーマンスが向上します。

変数宣言の強制

Option Explicitステートメント

前項において「変数宣言を行わなくても変数を使用することは可能」と説明しましたが、宣言していない変数は使えないように、変数の宣言を強制することもできます

変数の宣言を強制するには、モジュールの宣言セクションにOption Explicitステートメントを記述します。

変数宣言の強制 Option Explicit

上記例では変数aDimステートメントで宣言していますが、これを行っていない場合はVBAを実行した段階で、未定義エラーが発生します。

変数宣言の強制 Option Explicitの記述はあるが、Dimステートメントの宣言がない例
変数の未定義エラー

オプション設定によるOption Explicitの自動挿入

VBEの「ツール」→「オプション」→「編集」タブの[変数を宣言を強制する]のチェックボックスをオンにすると、宣言セクションにOption Explicitが自動挿入されます。

Option Explicitの自動挿入

エラーを防止するうえでも、変数宣言は必ず行う癖をつけましょう。
そういった観点からも、上記のオプション設定のオンを推奨します!

基本的な変数宣言方法

基本構文

基本的な変数宣言の基本構文は以下のとおりです。

Dim 変数名 As データ型

宣言する変数の前にDimステートメントを配置します。

DimステートメントDimは「Dimension(次元)」の略です

実例

単一宣言

変数iInteger型(整数型)で宣言するケースです。

Dim i As Integer

複数宣言

変数x,y,zをそれぞれLong型(長整数型)で宣言するケースです。
3~5行目のように、複数行に渡り記載してもOKです。

Dim x As Long, y As Long, z As Long

Dim a As Long
Dim b As Long
Dim c As Long

複数の変数を同時に宣言する場合は注意が必要です。
例えば、以下のように宣言すると、変数abは、データ型を指定していないことになるためVariant型となります。

Dim a, b, c As Integer

データ型

データ型とは

データ型とは、変数に格納する値の種類のことです。Dimステートメントで変数を宣言する際、As句を使って一緒に指定します。

この指定を正しく行わないと、意図したデータが格納できないというケースにもつながります。例えば、数値を扱うデータ型を指定した変数には、文字列のデータを格納することができなくなります。

逆にいうと、冒頭のメリットでも説明しましたが、誤ったデータの格納も防ぐことができます。

データ型一覧

データ型日本語名内容(簡略版)使用例
Integer整数型-32,768~32,767の整数ループカウンタ等
Long長整数型約ー20億~20億の整数ID、カウント等
Single単精度浮動小数点数型単精度小数簡単な小数計算
Double倍精度浮動小数点数型倍精度小数複雑な計算
String文字列型文字列名前、住所等
Booleanブーリアン型真偽値チェック有無
Date日付型日付・時刻取引日、採用日等
Currency通貨型通貨計算用の固定小数点型売上、金額計算
Objectオブジェクト型オブジェクト参照レコードセット等
Variantバリアント型何でもOK型が不明な場合

主なデータ型別の変数活用事例

Integer(整数型)

Dim a As Integer
Dim b As Integer
Dim result As Integer

a = 10
b = 5
result = a + b

MsgBox "合計は " & result

変数aと変数bにそれぞれ数値を代入して、その変数を足し算することで、結果をメッセージボックスに表示させる例です。

String(文字列型)

Dim first_name As String
Dim last_name As String

first_name = "小林"
last_name = "進"

MsgBox "こんにちは、" & first_name & last_name & "さん!"

String型の変数に値を代入する場合は、ダブルコーテーション(”)で囲む必要があります。例では、文字列型の変数を連結させて、小林進 という名前をメッセージボックスに表示しています。

Boolean(ブーリアン型)

Dim isChecked As Boolean

isChecked = True ' チェックされている場合

If isChecked Then
    MsgBox "チェックされています。"
Else
    MsgBox "チェックされていません。"
End If

Boolean型もよく使用される変数です。フォームのチェックボックスがON/OFF(True/False)という2択を判定する際によく用いられます。

変数名の付け方

変数名の制約

変数には基本的に自由に名前を付けることができますが、一部の記号が使用できないなど制約もあります。

こちらの記事では、命名規則の制約について解説していますので、併せてご覧ください。

変数名のケース

変数名には英語はもちろん、日本語も使用できますが、実際は英語を使用するケースが多いと思います。英語を使う場合はケースと呼ばれる、アルファベットの大文字と小文字の使い方にいくつかの種類がありますので、ご紹介します。

アッパーキャメルケース(UpperCamelCase)

英単語をつなげて、各単語の先頭文字を大文字にするケースです。Camelとはラクダという意味で、アルファベットの大文字を、ラクダのコブに例えています。Pascalという古いプログラミング言語でよく使われたことから、パスカルケースとも呼ばれます。

ロワーキャメルケース(lowerCamelCase)

ロワーキャメルケースは、アッパーキャメルケースと同様ですが、先頭文字は小文字にするケースです。ヒトコブラクダケースともいいますが、単にキャメルケースといえばこちらのことを指します。

スネークケース(snake_case)

全ての英単語は小文字で、英単語間をアンダースコアでつなぐケースです。アンダースコアを地面を這う蛇に例えています。

コンスタントケース(CONSTANT_CASE)

スネークケース同様、英単語間をアンダースコアでつなげますが、すべて大文字を使用します。こちらは、変数よりも定数の命名によく使用されます。

ケバブケース(kebabu-case)

英単語をハイフンでつなぐケースです。ケバブとはトルコの串焼き料理で、ハイフンを串焼きの串に例えています。

個人的によく使用するのはスネークケースです。理由は単語間の区切りが明確で、ファイル名が長くなっても視認性が高いからです。

どのケースを使うにしても、同一のモジュールでは一つのケースに統一することをお勧めします。

まとめ

最後に本記事の主なポイントをまとめます。

  • 変数宣言とは、変数を使うための事前登録のようなもの
  • 変数宣言にはDimステートメントを使う
  • 変数宣言にはデータ型を指定する重要な役割がある(As句
  • データ型の指定をしないと自動で Variant になる
  • 宣言漏れを防ぐため、Option Explicit を常に書こう!(オプション設定を推奨)
  • 変数名はある程度自由度はあるが、一部制約もある
  • 変数名に英語を使う場合は、ケースを統一しよう

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