【Excel VBA入門】変数とは?図解とコード例から学ぶ基本的な使い方

【Excel VBA入門】変数とは?図解とコード例から学ぶ基本的な使い方

こんにちは、業務自動化ツール開発担当の吉池(@valmore_myoshi)です。

Excel VBAの基本中の基本でありながら、初心者が最初につまづきやすいもの、それが変数です。

そんなことをいうと、これから学び始める方は身構えてしまうかもしれませんが、概念をゆっくり何度も咀嚼すれば何事も必ずわかるようになります。

本記事でもできる限りかみ砕いて変数を解説するので、ぜひ覚えて帰ってください。

変数とは

変数とは、端的に言えば値を入れた箱です。数値でも文字列でも変数に入れて、使うことができます。

変数のイメージ

なぜ、この変数という名の箱に値を入れるのかというと、プログラムで使いまわせるからです!例えば、下記の例を見てください。消費税を8%と仮定して、税込み金額の計算をしています。

' 消費税8%の場合
    
Debug.Print 1000 * (1 + 0.08)
Debug.Print 1500 * (1 + 0.08)
Debug.Print 2000 * (1 + 0.08)
実行結果

もし、消費税が10%になったらどうすればいいでしょうか?8%の消費税を表す0.08を一つひとつ0.1に置き換える必要が生じます。

一方、消費税を変数という名の箱に入れておく場合を考えてみましょう。消費税が変わっても変数に代入する値を1か所だけ変えれば済みます。これが、変数の役割です。

Dim tax As Double

' 消費税の変更はtaxに代入する値だけ変えればOK!
tax = 0.08

Debug.Print 1000 * (1 + tax)
Debug.Print 1500 * (1 + tax)
Debug.Print 2000 * (1 + tax)

Dimを使って変数を宣言する

変数はDimを使って宣言してから使います。データ型は数値や文字列など、変数に入れる値の種類を表します。

Dim 変数名 As データ型

データ型は指定しなくても使えますが、その場合はなんでも対応できるVariant型になります。ただ、データ型を指定したほうが、変数に入っている値の種類をいちいちチェックする手間がなくなるので処理速度の向上が見込めます。必ずデータ型も指定しましょう!

よく使うデータ型

データ型の種類はたくさんありますが、すべてを覚える必要はありません。基本的によく使う下記のデータ型だけ覚えておいて、これ以外のものは必要に応じて調べれば十分です。

データ型サイズ説明
String10バイト~
文字列。
Integer2バイト-32,768 〜 32,767の整数。
Long4バイト-2,147, 483,648 〜 2,147, 483,647の整数。
Double8バイト倍精度浮動小数点数。
Boolean2バイトTrueとFalseをとる真偽値。
Date8バイト日付型。
Object4バイト任意のオブジェクト型。
Variant16バイト任意の値、オブジェクト型でもOK。

オブジェクトを代入するときはSetを使う

基本的なデータ型以外にもオブジェクトと呼ばれる値も存在します。VBAではセルをはじめ、ワークシートなど操作できますが、この操作対象のことをオブジェクトと呼びます。

このオブジェクトを変数に代入するときだけ注意が必要です。そのまま代入するのではなく、変数名の前にSetを入れるというルールがあります。

Set 変数名 = オブジェクト

例えば、セル操作で使うRangeオブジェクトに特定のセル範囲を代入してみると下記のように書けます。

' 変数宣言
Dim rng As Range

' 変数rngにRangeオブジェクトを代入
Set rng = Range("A1:C3")

※オブジェクトについて詳しく知りたい方はこちらの記事をご覧ください。
【Excel VBA入門】オブジェクトとは?初心者向けに概念をやさしく解説!

変数宣言を強制させるにはOption Explicit

変数は宣言して使うと説明しましたが、実は宣言なしでも使えます。ただ、宣言しないで使うと、プログラム内に散らばった変数を管理できず、エラーのリスクが残ってしまいます。

そこで、変数宣言を強制させる機能がExcelに備わっています。VBA開発の前に必ず設定しておきましょう!

まずは①開発タブから②「Visual Basic」をクリックしてください。

VBAの開発画面が開くので、③ツールから④オプションをクリック。

オプションダイアログが表示されるので、⑤「変数の宣言を強制する」にチェックを入れて⑥OKボタンを押下して完了です。

変数宣言の強制ルールが設定されると、コードウィンドウに「Option Explicit」が追記されます。この記述がある限り、宣言していない変数は使えなくなります。

定数の使い方

ここまで解説してきた変数は、値を何度も入れ替えることができます。一方、一度値を変数に代入したら変えられないものが定数です。定数はConstを使って定義し、初期値も宣言と同時に代入できます。

Const 定数名 As データ型 = 初期値

定数の値は変えられないので、間違って代入してもエラーで教えてくれます。例として消費税を定数に設定したプログラムを書いてみましょう。

Const TAX As Double = 0.08

Debug.Print 1000 * (1 + TAX)
Debug.Print 1500 * (1 + TAX)
Debug.Print 2000 * (1 + TAX)

変数の有効範囲、スコープとは

変数の有効範囲をスコープと呼びます。プログラムの中で変数を宣言した場所によってスコープが変わります。

スコープの概念は少し難しいので、気軽に読んでもらえればOKです。VBAの学習が進んだら思い出してみてください。

例えば、下記の例を見てください。Sub ~ End Subで囲まれたプログラムが2つあり、それぞれ同じ名前の変数を使っています。実行結果からみてもわかる通り、同じ名前であっても異なるものとして使用されているのがわかります。

Sub test1()
    Dim hello As String
    
    hello = "Hello, world!!"
    
    Debug.Print hello
End Sub

Sub test2()
    Dim hello As String
    
    hello = "こんにちは"
    
    Debug.Print hello
End Sub
実行結果

全体を通して変数を共有したいのであればSub ~ End Subの外で変数宣言します。最初のtest1プロシージャで変数numに10が代入され、次のtest2プロシージャでさらに10が加算されています。

Dim num As Integer

Sub test1()
    num = 10
    
    Debug.Print num
End Sub

Sub test2()
    num = num + 10
    
    Debug.Print num
End Sub
実行結果

まとめ

Excel VBAの変数について解説しました。値を格納する箱として使うことができ、数値や文字列を簡単に扱えるようになります。

VBA開発において変数を使わないことはほぼありません。それだけ基本中の基本なので、変数の特徴を押さえて使いこなせるよう理解しましょう!