ここではVBAの文法を簡単にまとめておきます。
目次
基礎文法 - 式
VBAには様々な式が存在します。数式
、条件式
、オブジェクト式
、代入式
などです。
式とは、数値
、ブール値
、日付
、文字列
、オブジェクト
などの値
を生成する
リテラル
、演算子
、変数
、定数
、関数
、キーワード
などによる組み合わせのことを言います。
式は計算され、いずれかの値に確定します。式の値が確定することを評価するとも言います。
基礎文法 - リテラル
「100
」という数値や、「True
」というブール値、「"Hello"
」という文字列など、
それぞれ定められた記法により、式の中で直接仕様することができます。
定められた記法および、その値自体のことをリテラル
と呼びます。
基礎文法 - 変数
変数は数値、文字列などの値を格納することができる名前付きの保存場所です。
変数の値はプログラム内で自由に変更することができます。
値を変更することを代入といいます。
また変数の名前と種類について定義することを宣言といいます。
基礎文法 - 条件分岐 - If-Then-Elseステートメント
If-Then-Else
If <条件式> Then 処理1 Else 処理2 End If
If
に続いて<条件式>
を記述します。条件式
がTrue
であればThen
に続く処理1
が実行されます。条件式
がFalse
であればElse
に続く処理2
が実行されます。Else句
は省略可能です。- 条件には
ブール式
または数値式
を指定します。数値式
の場合、0
はFalse
、0以外
はすべてTrue
と判定されます。
以下のように一行に記述することもできます。
If <条件> Then 処理1 Else <処理2>
- 一行に記述した場合、末尾の
End If
は省略可能です。
If-ElseIf
あとで書きます。
基礎文法 - 条件分岐 - Select-Caseステートメント
Select Case文は複数の条件分岐をすっきり書くための構文です。
基本的にはIf-Then-Elseステートメントで書けるものです。
Select-Case
Select Case <比較する値> Case <条件1> ' 条件1を満たしたときの処理 Case <条件2> ' 条件2を満たしたときの処理 Case Else ' いずれの条件も満たさなかったときの処理 End Select
- C言語と違ってフォールスルーはしない。
<条件>
の書き方に以下パターンがあります。- 値とマッチするか。(完全一致)
- 複数のどれかにマッチするか。(カンマ区切り)
- 範囲内に含まれる。(xx To yy)
- 大小比較 (Is >= xx, Is <= xx)
- 上に記述した
<条件>
とマッチするか評価されてゆき、どれか一つでもマッチすると、以降の処理は実行されません。 - どの
<条件>
にもマッチしなかった場合、Case Else
で指定した処理が実行されます。Case Else
を省略した場合で、かつどの<条件>
にもマッチしなかった場合は、何も処理されません。
例:値とマッチ
Dim p_time As String p_time = "朝" Select Case p_time Case "朝" Debug.Print "おはようございます!" Case "昼" Debug.Print "こんにちは!" Case "夜" Debug.Print "こんばんは!" Case Else Debug.Print "Zzz..." End Select
おはようございます!
例:複数のどれかにマッチ
Dim p_num As Integer p_num = 5 Select Case p_num Case 1, 3, 5, 7, 9 Debug.Print p_num & "は奇数です。" Case 2, 4, 6, 8 Debug.Print p_num & "は偶数です。" Case Else Debug.Print "1から9までの値を指定してください。" End Select
5は奇数です。
例:範囲内に含まれる
Dim p_age As Integer p_age = 40 Select Case p_age Case 0 To 18 Debug.Print p_age & "歳はこどもです。" Case 19 To 65 Debug.Print p_age & "歳は大人です。" Case 66 To 99 Debug.Print p_age & "歳はシニアです。" Case Else Debug.Print p_age & "歳以上の人はセンテナリアンと呼びます。" End Select
40歳は大人です。
- センテナリアンって言葉をこのサンプルをメモしていて初めて知りました。
例:大小比較
Dim p_temperature As Integer p_temperature = 105 Select Case p_temperature Case Is <= 0 Debug.Print p_temperature & "度で水は固体です。" Case Is >= 100 Debug.Print p_temperature & "度で水は気体です。" Case Else Debug.Print p_temperature & "度で水は液体です。" End Select
105度で水は気体です。
Is
の部分に<比較する値>
が入っていると思ってCase句を書いてください。