見出し画像

VBA⑤ 変数と定数

変数とは

・変数はデータを一時記憶するための箱のようなもの
・変数を利用できるのがVBAの大きなメリットの1つである
・変数があればマクロの記録では作れない柔軟なマクロを作ることができる

変数 ← データ(数値、文字列、オブジェクトなど)

Dim taxRate As Single
 # 「taxRate」という変数を定義
    taxRate = 0.1
 # 変数taxRateに「0.1」を代入

Range("R1").value = Range("A1").value * taxRate
 # 変数taxRateを利用して計算する

変数を宣言する

・変数は使う前に宣言しておく必要がある
・変数名は自分で決めることができる
・変数には型がある

型を指定して宣言
Dim 変数名 As 型
・Dim taxRate As Single ← 単精度浮動小数点型
・Dim maxRow As Long ← 長整数型
・Dim shName As String ← 文字列型

型を指定せずに宣言
・Dim 変数名
・Dim taxRate
・Dim maxRow
・Dim shName
型を省略した場合、自動的にバリアント型として宣言される

変数の型とは

スクリーンショット 2021-09-13 21.03.12

変数に代入する

・変数に代入する
変数名 = 値
taxRate = 0.1
shName = "Sheet1"

・変数の値を使用する
Range("A1").value = taxRate
└プロパティに代入する
MsgBox shName
└引数として使う

変数の名前

変数名のルール
・「日本語」「英語」どちらも可能
・英語の大文字/小文字は区別される
・「Sub」「If」などVBAで既に決まった言葉は使用できない

変数の適用範囲

・狭い範囲の変数
└ローカル変数
・広い範囲の変数
└モジュールレベル変数
・1番広い範囲の変数
└グローバル変数

変数の適用範囲(スコープ)の違い

「ローカル変数」は、同じプロシージャ内でしか利用できない

Sub Example()
    Dim num As Long ← このプロシージャ内で宣言したローカル変数
    num = 100
    Range("A1").value = num
End Sub

Sub Example()
    num = num + 50 ← 別のプロシージャでは利用できない
    Range("A1").value = num
End Sub

「モジュールレベル変数」は、同じモジュール内でなら利用できる

Option Explicit
Dim num As Long ← 宣言セクションで宣言したモジュールレベル変数

Sub Example()
    num = 100 ← どのプロシージャでも利用できる
    Range("A1").value = num
End Sub

Sub Example()
    num = num + 50 ← どのプロシージャでも利用できる
    Range("A1").value = num
End Sub

※ただし別のモジュールでは利用できない

「グローバル変数」は、別のモジュール内でも利用できる

・module1
Option Explicit
Public num As Long ← 宣言セクションでPublicステートメントで宣言したグローバル変数

Sub Example()
    num = 100 
    Range("A1").value = num
End Sub

Sub Example()
    num = num + 50
    Range("A1").value = num
End Sub

※別のモジュールでも利用できる
・module2
Option Explicit

Sub Example()
    num = 100 
    Range("A1").value = num
End Sub

スコープのまとめ

・ローカル変数
プロシージャ内で宣言(Sub ~ End Subの間)
同じプロシージャ内のみ使用できる
└別のプロシージャでは使用できない

・モジュールレベル変数
モジュールの宣言セクションで宣言
同じモジュール内でなら、どのモジュールでも使用できる
└別のモジュールでは使用できない

・グローバル変数
モジュールの宣言セクションでPublicステートメントで宣言
どのモジュールでも使用できる

実務では
・適用範囲はなるべく狭く、限定的に
・適用範囲を広くとってしまうと、各プロシージャ、各モジュールで、変数に思わぬ値が入り、エラーにつながる可能性がある

変数の初期値

変数を宣言したばかりの時、変数には何が入っているか

数値が入る変数
・Integer,Long,Single,Double,Currencyなど
・初期値 =「0」
文字列が入る変数
・String
・""(空白)
オブジェクトを参照する変数
・Object,Rangeなど固有のオブジェクト
・Nothing = オブジェクトを何も参照していない

変数の有効期間

変数に入った値は、マクロが終わっても残る

・ローカル変数
プロシージャ内で宣言(Sub ~ End Subの間)
プロシージャが終わると値はクリアされる

・モジュールレベル変数
モジュールの宣言セクションで宣言
プロシージャが終わっても値も残ることがある

・グローバル変数
モジュールの宣言セクションでPublicステートメントで宣言
プロシージャが終わっても値も残ることがある

定数の名前を大文字で表記しているか?
・定数の名前づけのルールは変数と同じ。英字(大文字/小文字)でも日本語でもOK
・ただし、名前を見た時点で「これは変数ではなく定数である」と人目でわかるように定数は名前を大文字で表記している

定数とは

変数と似た概念。
一度初期値を設定したらその後は変更できないのが変数

変数
・値を上書きできる
・DimやPrivateで宣言
定数
・一度決めた値
・変えられない
└変更させたくない値
税率、定型分、行数など

この記事が気に入ったらサポートをしてみませんか?