VBAが嫌いな人が書いたVBA入門記事その3です。初心者の人も最低限だけ身に付けてPythonに移行しましょう。→VBAユーザーのためのPython入門 ~xlwingsでExcelからPythonを呼び出す~
記事一覧
- Excel VBA入門 ~その1 Excel VBAとは~
- Excel VBA入門 ~その2 最初のプログラム~
- Excel VBA入門 ~その3 基礎1~
- Excel VBA入門 ~その4 基礎2~
- Excel VBA入門 ~その5 Tips~
- Excel VBA入門 ~その6 アンチパターン~
プロシージャー
Sub プロシージャー名~End Subの単位で呼び出すことができる。
Sub test()
Dim msg As String
msg = "hello"
Debug.Print msg
End Sub
変数
変数は値やオブジェクト(後述)を入れておくための箱。上記のDim msg As Stringで変数msgを宣言し、msg = "hello"でmsgに値を代入。
データ型
変数入る値の種類(数値、文字、日付、ワークシート等)を型という。型には値型と参照型の2種類がある。
Dim i as Long
i = 1000 '値型の例
Dim rg as Range
Set rg = Range("A2") '参照型の例
値型
変数名 = 値で代入する。代表的な型は以下のとおり:
| 型 | 名前 | 説明 |
|---|---|---|
| String | 文字列型 | 任意の長さの文字 |
| Long | 長整数型 | 「Integerが無いようだが?」「あんなの飾りです。偉い人にはそれが分からんのですよ。」 |
| Double | 浮動小数点型 | 実数のこと 「Singleが無い(ry?」「あんなの(ry」 |
| Boolean | ブール型 | 真偽値(TrueまたはFalse) |
| Date | 日付型 | 日付時刻を表す |
参照型
Set 変数名 = 値で代入する(使い分ける必要があるのか…)。オブジェクトを代入する際に使用する。オブジェクトの種類には、ワークシートを表すWorksheet型、セル範囲を表すRange型、テーブルを表すListObject型等、値型と違って無数にある。値型以外のものはすべてオブジェクトと覚えておいてよい。
四則演算
| 演算子 | 処理 | 備考 |
|---|---|---|
| + | 加算 | |
| - | 減算 | |
| * | 乗算 | |
| / | 除算 | |
| \ | 除算の商 | |
| Mod | 除算の余り | |
| ^ | べき乗 |
制御構文
If文と比較演算子
If文
If 条件式 Then ~ End Ifで、条件にあった場合、Then ~ End If部分が実行される。複数のElse Ifで二つ目の条件を、Elseでいずれの条件にも合致しない場合の処理を実行できる。
If x = "犬" Then
処理1
Else IF x = "猫" Then
処理2
Else
処理3
End If
比較演算子
下記の比較演算子の結果を論理演算子(And, Or, Not等)および括弧((, ))でつなげて、条件式を作る。
| 演算子 | 説明 |
|---|---|
| = | 左辺と右辺は等しい |
| <> | 左辺と右辺は等しくない |
| < | 左辺は右辺より小さい |
| <= | 左辺は右辺以下 |
| > | 左辺は右辺より大きい |
| >= | 左辺は右辺以上 |
| Like | 左辺は右辺で指定したパターンを持つ →Link |
| Is | 左辺と右辺が同じオブジェクトを参照している →Link |
Select Case文
Select Case文を使えば、同じ変数に対する複数の条件をより簡潔に記述できる。→Link
基本
Select Case x
Case "犬"
処理1
Case "猫"
処理2
Case Else
処理3
End Select
複数の値
Select Case x
Case "犬", "狼"
処理1
Case "猫", "ライオン"
処理2
Case Else
処理3
End Select
To で範囲指定
Select Case age
Case 0 To 10
処理1
Case 11 to 20
処理2
Case Else
処理3
End Select
Is 比較演算子
Select Case age
Case Is >= 0, Is <= 10
処理1
Case Is >= 11, Is <= 20
処理2
Case Else
処理3
End Select
For Each文
コレクションに含まれる各オブジェクトに対して、繰り返し処理を行う。ループを途中で抜ける場合にはExit Forを使う。
For Each 要素 In コレクション
繰り返し処理
If 終了条件 Then
Exit For
End If
Next
配列に対して繰り返し処理を行うには、For文を使う:
For i = 1 to Ubound(配列)
繰り返し処理
Next