Excel VBA 記法・文法のチートシート

Excel VBA の記法や文法を一通り集めてみました。

様々なプログラミング言語を使っていると、細かなところは忘れてしまうものです。
毎回、調べるのも手間なので、このページを見ればよいように、自分用の備忘録を兼ねています。

変数の宣言

Dim <変数名> As <型>

(例)

Dim i As Integer
i = 0

よく使う型

型名 識別子
ブール型 Boolean
整数型 Integer
日付型 Date
文字列型 String
オブジェクト型 Object
バリアント型 Variant

定数の宣言

Const <変数名> As <型> = <値>
Const TAG As String = "ThisClass"

オブジェクトの生成

Set <変数名> = CreateObject(<クラス>)

(例)

Set list = CreateObject("System.Collections.ArrayList")

オブジェクトの解放

Set <変数名> = Nothing

(例)

Set list = Nothing

文字列の連結

<文字列A> & <文字列B>

(例)

Dim str As String
str = "Hello " & "World!"

文字列のフォーマット

Format(<値>, <書式>)

(例)

Dim d As Date
d = Now
Debug.Print (Format(d,"yyyy年mm月dd日"))

数値と文字列の変換

Val(<文字列>)

(例)

Dim i As Integer
i = Val("123")

if文

If <条件式> Then
    <文>
EndIf
If <条件式1> Then
    <文1>
Else
    <文2>
EndIf
If <条件式1> Then
    <文1>
ElseIf <条件式2> Then
    <文2>
EndIf

(例)

Dim str As String
If IsEmpty(str) Then
    Debug.Print("Empty!")
Else
    Debug.Print(str)
EndIf

for文

For <初期値> To <終値>
    <文>
Next <インデックス変数>    

(例)

For i = 1 To 10
    Debug.Print("i=" . i)
Next i

for文のbreak

For <初期値> To <終値>
    Exit For
Next <インデックス変数>    

(例)

For i = 1 To 10
    If i = 5 Then
        Exit For
    End If
Next i

比較演算子

意味 演算子
等しい =
等しくない <>

論理演算子

意味 演算子
論理積 And
論理和 Or
論理否定 Not

関数 (Sub, Function)

定義 (戻り値なし)

Sub <プロシージャ名>(<引数>)
    <文>
End Sub

(例)

Sub printDebug(ByVal msg)
    Debug.Print Now & ":" & msg
End Sub

定義 (戻り値あり)

Function <関数名>(<引数>) As <戻り値型>
    <文>
End Function

(例)

Function getInt(ByVal str) As Integer
    getInt = Val(str)
End Function

呼び出し (戻り値なし)

<プロシージャ名>(<引数>)

(例)

Sub printDebug(ByVal msg)
    Debug.Print Now & ":" & msg
End Sub

printDebug("foo")

または、括弧なしでもよい。

printDebug "foo"

呼び出し (戻り値あり)

呼び側

<関数名>(<引数>)

呼ばれ側

Function <関数名>(<引数>) As <戻り値型>
    <関数名> = <戻り値>
End Function

(例)

Function getInt(ByVal str) As Integer
    getInt = Val(str)
End Function

Dim retVal As Integer
retVal = getInt("1234")

関数のreturn

Sub <プロシージャ名>(<引数>)
    Exit Sub
End Sub

(例)

Sub printDebug(ByVal msg)
    If IsEmpty(msg) Then
        Exit Sub
    End If
    Debug.Print Now & ":" & msg
End Sub

関数の引数

ByRef は参照渡し。
ByVal は値渡し。

Sub <プロシージャ名>(ByRef <引数0> As <型0>, ByVal <引数1> As <型1>)
    <文>
End Sub

(例)

Sub printDebug(ByVal msg)
    Debug.Print Now & ":" & msg
End Sub

複数引数を持つプロシージャの呼び出し

Call <プロシージャ名>(<引数0>, <引数1>, <引数2>)

(例)

Sub printDate(ByVal y As String, ByVal m As String, ByVal d As String)
    Debug.Print y & "/" & m & "/" & d
End Sub

Dim year As String, month As String, day As String
year = "2018"
month = "8"
day = "15"

Call printDate(year, month, day)

エラーを無視する

Sub 内の “On Error Resume Next” 以降のエラー処理が無視されます。

On Error Resume Next
<エラーを無視する処理>

(例)

Sub foo()
    On Error Resume Next
    ... ' エラーが発生する処理
End Sub

デバッグプリント

イミディエイト ウィンドウに出力されます。

Debug.Print <文字列>

(例)

Debug.Print Now & ":" & msg