仕事で未だに使うことのあるを改めて体系的に学びたく
を読んでいく。
目次
3. VBAの基礎文法
3.1 変数の使い方
3.1.1 変数の宣言方法
で変数を扱うには、ステイトメントで変数(とその型)を定義する*1。他方で宣言無しで変数にいきなり値を代入することもできる。
Sub macro3_1() Dim foo As Long foo = 10 foo = foo * 5 boo = 10 ' booは宣言していない Debug.Print "foo+booの値", foo + boo End Sub
オブジェクトを扱うこともできる。
Dim rng As Range Set rng = Range("A1:C3") rng.Value = "VBA"
は変数の宣言時に値を代入することはできない。
Dim foo As Long = 10 ' 左はエラー
スペルミスなどを防ぐべく宣言無しの変数利用を防ぐためには、モジュールの先頭にと記述しておく。
'以下はエラーを起こす Option Explicit Sub macro3_1() Dim num num = 10 nun = num * 5 End Sub
毎回の宣言が面倒であれば、オプションから設定を行うと宣言無しの変数利用を恒常的に禁止することができる。
→ |
3.1.2 よく利用するデータ型
データ型 |
用途 |
---|---|
文字列 | |
整数型。~の範囲の整数 | |
長整数型。~の範囲の整数 | |
単精度浮動小数点数型。正の値:~負の値:~ | |
倍精度浮動小数点型。正の値:~負の値:~ | |
日付型。年月日・時分秒を扱う。 | |
真偽値型。正の場合は、の場合は | |
汎用オブジェクト型。任意のオブジェクトを代入可能 | |
バリアント型。どのような値・オブジェクトでも代入可能 | |
固有オブジェクト |
やなど、特定の種類のオブジェクト |
3.1.3 変数に値を代入する
宣言した変数に値を代入・再代入するには「=」演算子を用いる。
ではインクリメントやデクリメントはできない。素直に/した値を再代入する。
' カウントアップ/ダウン num++ 'エラー num-- 'エラー Dim num As Long num = 1 num = num + 1 ' 加算代入・乗算代入 num += 10 'エラー num *= 5 ' エラー Dim num As Long num = 1 num = num + 10 num = num * 5
変数にオブジェクトを代入するには、=演算子ではなくステートメントを用いる*2。
' 変数にオブジェクトを代入 Set オブジェクト変数 = セットしたいオブジェクト
3.1.4 変数のスコープ
の変数は、基本的に1つのマクロ内で宣言された変数がそのマクロの中でのみ有効であるというルール下にある。もし複数のマクロで共有して使用したい変数がある場合は、マクロの外側でステートメントで記述する。
Option Explicit ' マクロ外で定義した変数はグローバルに利用可能 Dim X As Long Sub macro1() ... End Sub Sub macro2() ... End Sub
このようなマクロ外で宣言された変数は、モジュールレベル変数と呼ぶ。なおモジュールレベル変数はマクロが停止されるまで値を保持する。
3.1.6 変数の命名規則
変数を利用する際には、自分なりの命名規則を決めた方が良い。
- 変数の名づけルール例
変数名の例 |
意図・例 |
---|---|
文字列、数値といった値を扱う変数。データ型が分かるようにデータ型を短縮した名前 | |
一時的にデータを格納する変数名。 | |
使用するオブジェクトの短縮名 | |
ループ処理に用いる変数名 | |
配列を扱う際の変数名。の短縮名 | |
「用途+データ型」という変数名 | |
売上 |
日本語等の2バイト文字で変数名を付ける |
すべての変数に統一した接頭辞を付けて、自分が定義した変数であることを可視化 |
なおでは、
- 大文字と小文字を区別しない
- アンダースコア( _ )を利用できるものの、アンダースコアを変数名の先頭にすることはできない