【VBA入門】変数と定数の使い方、スコープ(適用範囲)の違いを徹底解説

目次

はじめに

VBAでプログラミングを始めるにあたり、最初に理解すべき最も重要な概念の一つが「変数」と「定数」です。これらは、数値や文字列といったデータを一時的に格納しておくための「箱」のようなものです。

  • 変数 (Variable): 中身を自由に入れ替えられる箱 📦
  • 定数 (Constant): 一度入れたら中身を変えられない箱 🗃️

さらに、これらの箱が「どこから見えるか、どこで使えるか」という**スコープ(適用範囲)**の概念を理解することで、より構造化された、バグの少ないプログラムを書けるようになります。

この記事では、VBAの基本である変数と定数の使い方、そしてそのスコープについて、初心者の方にも分かりやすく解説します。


1. 変数 (Variable) とは?

変数とは、プログラムの実行中に値が変化する可能性のあるデータを格納するためのものです。

変数の宣言 (Dim)

VBAでは、Dim (Dimensionの略) というキーワードを使って変数を宣言するのが基本です。

Dim 変数名 As データ型

  • データ型: 変数に入れるデータの種類(整数、文字列など)を指定します。代表的なデータ型には以下のようなものがあります。
    • String: 文字列
    • Long: 整数(大きな数も扱える)
    • Double: 小数
    • Boolean: TrueFalse
    • Range: セル範囲などのオブジェクト
    • Variant: あらゆる種類のデータを格納できる(便利な反面、意図しない型になりやすく注意が必要)

サンプルコード

' 変数を使ってみる
Sub UseVariables()
    ' 変数を宣言
    Dim staffName As String
    Dim itemCount As Long
    Dim targetCell As Range
    
    ' 変数に値を代入
    staffName = "田中 宏"
    itemCount = 150
    Set targetCell = Worksheets("Sheet1").Range("A1") ' オブジェクトはSetで代入
    
    ' 変数の値をセルに書き込む
    targetCell.Value = staffName & "さんの在庫数は " & itemCount & " 個です。"
End Sub

解説: Dimで3つの異なる型の変数を宣言し、それぞれに値を代入しています。オブジェクト型(Rangeなど)の変数に値を代入する際は、Set キーワードが必要になるのがポイントです。


2. 定数 (Constant) とは?

定数とは、プログラムの中で決して変わることのない固定値を格納するものです。消費税率や、特定のファイルパス、会社名など、固定して使いたい値に名前を付けるのに便利です。

定数の宣言 (Const)

Const というキーワードを使って宣言します。定数名は、慣習的に大文字のスネークケース(例: TAX_RATE)で書かれることが多いです。

Const 定数名 As データ型 = 値

サンプルコード

' 定数を使ってみる
Sub UseConstants()
    ' 定数を宣言
    Const COMPANY_NAME As String = "株式会社テックサンプル"
    Const SALES_TAX_RATE As Double = 0.1
    
    Dim price As Long
    price = 5000
    
    ' 定数を使って計算し、メッセージボックスに表示
    MsgBox COMPANY_NAME & vbCrLf & _
           "税込価格: " & price * (1 + SALES_TAX_RATE) & "円"
           
    ' 定数に再代入しようとするとエラーになる
    ' SALES_TAX_RATE = 0.12  ' <- この行はコンパイルエラーになる
End Sub

解説: 定数として宣言した SALES_TAX_RATE は、プログラムの途中で変更しようとするとエラーになります。これにより、誤って重要な値を書き換えてしまうのを防げます。


3. 変数のスコープ(適用範囲)

変数がどこからアクセスできるかは、その変数が「どこで宣言されたか」によって決まります。これをスコープと呼びます。

プロシージャレベルの変数

SubFunction中でDimを使って宣言された変数です。そのプロシージャが終了すると消滅し、他のプロシージャからはアクセスできません

Sub ProcedureScopeExample1()
    Dim localValue As Long
    localValue = 100
    MsgBox "プロシージャ1での値: " & localValue
End Sub

Sub ProcedureScopeExample2()
    ' 下の一行はエラーになる!
    ' ProcedureScopeExample1のlocalValueは見えないため。
    ' MsgBox localValue
End Sub

モジュールレベルの変数

モジュールの先頭(Subの外)でDimまたはPrivateを使って宣言された変数です。そのモジュール内に書かれた全てのプロシージャからアクセス可能です。

' モジュールの先頭で変数を宣言
Private moduleValue As Long

Sub ModuleScopeExample1()
    moduleValue = 50
    MsgBox "プロシージャ1が値を設定しました: " & moduleValue
End Sub

Sub ModuleScopeExample2()
    ' ProcedureScopeExample1で設定した値が見える
    moduleValue = moduleValue + 10
    MsgBox "プロシージャ2での値: " & moduleValue ' 結果は60
End Sub

解説: ModuleScopeExample1moduleValue に代入した 50 という値は、ModuleScopeExample2 からも参照・変更できています。このように、複数のプロシージャで同じ値を共有したい場合にモジュールレベルの変数を使います。


まとめ

今回は、VBAプログラミングの基礎となる変数と定数、そしてスコープについて解説しました。

  • 変数 (Dim): 変わる可能性のある値を入れる箱。
  • 定数 (Const): 変わらない固定値を入れる箱。
  • スコープ:
    • プロシージャレベル: そのプロシージャ内だけで有効。
    • モジュールレベル: そのモジュール全体で有効。

これらの概念を正しく使い分けることが、バグが少なく、メンテナンスしやすいコードを書くための第一歩です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次