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