こちらの公式テキストを参考にExcel VBA の基本をまとめる。
(以下、Amazonへのリンク)
Excel VBA ベーシックでは公式テキストに記載されているサンプルコードがほぼそのまま出題されているような問題も存在する。
この記事にも例としてコードは載せるが、あくまで自分が理解するための「まとめ」という位置付けであるため、
試験対策についてはこちらの公式テキストを参照することを強くお勧めする。
プロシージャ
マクロの最小実行単位。SubプロシージャとFunctionプロシージャがある。
Subプロシージャ
値を返さないプロシージャ。記述されたコードを実行するのみ。
1 2 3 |
Sub Sample() ・・・ End Sub |
Callステートメント
あるプロシージャの中で、別のプロシージャを呼び出すときに用いる。
以下の例では、Test内でTest2が実行される。
1 2 3 4 5 6 7 8 |
Sub Test() ・・・ Call Test2 End Sub Sub Test2() ・・・ End Sub |
Callは省略することもできるが、可読性の維持のため省略しないほうが良い。
手間だからといってCallを省略すると、「突然プロシージャの名前が出てくたが、何のために記述しているのかがわからない」という事態が起こる可能性がある。
モジュールレベル変数
通常、プロシージャの中で宣言した変数はそのプロシージャ内でしか利用することができない。
しかし、宣言セクションで宣言することによって、モジュール内のどのプロシージャでも変数を利用することができる。
この変数をモジュールレベル変数と呼ぶ。
1 2 3 4 5 6 7 8 9 10 11 12 |
'モジュールレベル変数の宣言 Dim A As Long Sub Test() A = 2000 MsgBox A End Sub Sub Test() 'モジュールレベル変数を宣言しているのでAを使うことができる Range("D4") = A End Sub |
1 2 3 4 5 6 7 8 9 10 |
Sub Test1() Dim A As Long A = 1000 End Sub Sub Test2() Dim B As Long B = A * 2 'この場合は変数Aを使うことができない End Sub |
Functionプロシージャ
Subプロシージャと異なり、何らかの値を返すことができるプロシージャをFunctionプロシージャと呼び、以下のように記述する。
プロシージャ名(以下の場合は「Test」)を記述することで別のプロシージャ内で呼び出すこともできる。
1 2 3 |
Function Test() ・・・ End Function |
引数
以下のプロシージャの括弧内に入る値を引数と呼ぶ。
1 2 |
Sub Test(引数) Function Test(引数) |
プロシージャ内で何か計算するようなコードを記述している場合には、
プロシージャを呼び出す際に引数を渡すことでその値を使って計算を実行することができる。
引数は必ずしも数値とは限らず、文字列などを引数として渡すこともでき、冠すの呼び出し時に型を指定することができる。
プロシージャを作成したときに引数の型を指定している時は、呼び出し時に引数を渡さない・引数の数や型が指定と異なるといったことが起こるとエラーが発生する。
1 2 3 4 |
Sub Test(D As Long) ・・・ End Sub 'このプロシージャを呼び出すときには長整数型の引数を渡す必要がある |
値渡しと参照渡し
引数には値をそのまま渡す方法と、一度変数に格納してから変数を渡す方法の2つがある。
値をそのまま渡す方法を値渡しと呼び、変数に格納してから渡す方法を参照渡しと呼ぶ。
1 2 3 4 5 6 7 8 9 |
Sub Test(ByRef A As Long) ・・・ End Sub 'こちらでは参照渡しを指定。ByRefは省略することもできる Sub Test2(ByVal B As Long) ・・・ End Sub 'こちらでは値渡しを指定。 |
コメント