5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VBAの文法まとめ

Last updated at Posted at 2021-10-24

#はじめに
業務でたまにVBAを書くのですが、
文法の細かい部分を忘れていることが多いので、簡単にまとめてみました。

#モジュール
VBAにはモジュールという概念があり、5種類のモジュールが用意されています。

・シートモジュール
・ブックモジュール
・フォームモジュール
・標準モジュール
・クラスモジュール

各モジュールについてはこちらが理解しやすかったです。
当記事では標準モジュールとクラスモジュールについて記載します。

##標準モジュール
マクロで実行させたい処理をメインで記載する場所になります。
ユーザーは標準モジュール内に記載されたSubプロシージャを指定して実行することが出来ます。

###定義方法

Sub hoge()
    ' 処理
End Sub

##クラスモジュール
処理で使用するオブジェクトを自由に定義出来ます。
VBAでの処理をオブジェクト指向で実装したいときに使用します。

###定義方法

' オブジェクトが持つメンバー変数
Private Dim hoge As String

' オブジェクトが持つプロシージャ
Public Function GetHoge() As String
    GetHoge = hoge
End Function

Public Sub SetHoge(hoge As String)
    Me.hoge = hoge
End Sub

#変数
##変数宣言

Dim 変数名 As 

##代表的な型

型名 VBAでの表記 説明
文字列型 String 文字列
ブール型 Boolean True または False
バイト型 Byte 0から255の正の整数
整数型 Integer -32,768から32,767の整数
長整数型 Long -2,147,483,648から2,147,483,647の整数
単精度浮動小数点型 Single -3.402823E38から-1.401298E-45
1.401298E-45から3.402823E38
倍精度浮動小数点型 Double -1.79769313486231E308から-4.94065645841247E-324
4.94065645841247E-324から1.79769313486232E308
通貨型 Currency -922,337,203,685,477.5808から922,337,203,685,477.5807
日付型 Date 西暦100年1月1日から西暦9999年12月31日 (日付と時刻)
オブジェクト型 Object オブジェクト参照するデータ型
バリアント型 Variant あらゆる種類の値を保存できる型
ユーザー定義型 定義した型名 ユーザーが定義した型

##値セット

hoge = 1
' または
Set hoge = New Hoge

オブジェクト型変数の場合、Setステートメントを使用します。

##変数宣言と初期化を一行でやる

Dim hoge As String: hoge = "hoge"
Dim hoge As Hoge: Set hoge = New Hoge

#演算子
##算術演算子

演算子 説明 実行結果
+ 足し算 8 + 5 13
- 引き算 10 - 4 6
* 掛け算 3 * 5 15
/ 割り算 8 / 5 1.6
¥ 割り算の商 8 ¥ 5 1
Mod 割り算の余り 8 Mod 5 33
^ べき乗 6 ^ 2 36

##比較演算子

演算子 説明 実行結果
< 小さい 8 < 5 False
<= 以下 3 <= 8 True
> 大きい 8 > 5 True
>= 以上 3 >= 8 False
= 等しい 3 = 8 False
<> 等しくない 3 <> 8 True

##論理演算子

演算子 説明 実行結果
And 論理積 8 > 4 And 2 <= 3 True
Or 論理和 8 > 4 Or 4 <= 1 True
Not 論理否定 Not 8 > 4 False

#文字列の結合
文字列を結合する場合、「&」を使用します。

"りんご" & "," & "みかん"

#コメント
コメントを記述する場合、「'」を先頭文字に使用します。

' コメント

#プロシージャ
##プロシージャについて
プロシージャの定義方法は、FunctionまたはSubを使う2種類あります。
違いは、戻り値が返せるかどうかです。
Function:戻り値が返せる
Sub:戻り値が返せない

##定義方法

Function プロシージャ名(引数 As 引数の型) As 戻り値の型
    ' 処理
    
    プロシージャ名 = 戻り値
End Function

' Subの場合
Sub プロシージャ名(引数 As 引数の型)
    ' 処理
End Sub

Functionの場合、
戻り値はプロシージャ名に設定することで実装出来ます。
戻り値がオブジェクト型の場合はSetステートメントを使用します。

Set プロシージャ名 = 戻り値

##呼出し方法
プロシージャの呼出し方法には2通りあります。

hoge = プロシージャ名 ' 戻り値がある場合
Call プロシージャ名 ' 戻り値がない場合

戻り値が無い場合はCallステートメントを使用します。

#条件分岐

If 条件式1 Then
    ' 処理1
ElseIf 条件式2 Then
    ' 処理2
Else
    ' 処理3
End If

#繰り返し
##For文
###For Next

Dim i As Integer ' インデックス用の変数

For i = 1 To インデックスの最終値 Step ループごとの加算値
    処理
Next

Stepは省略可能で、省略した場合はループごとに+1されます。

###For Each

Dim hoge As String

For Each hoge In hogeList
    ' 処理
Next

Forを抜ける

Forの途中で処理を抜けるには「Exit For」を使用します。
For Next、For Eachの両方で使用出来ます。

For i = 1 To 3
    If i = 2 Then 
        Exit For
    End If
Next

###次のループに移る
VBAには他言語のようなcontinueはありません。
そのため、GoTo文で同様の動きを実現します。

Dim i As Integer

For i = 1 To 3
    If i = 2 Then
        GoTo Continue ' Continue:の行にジャンプします
    End If
    
Continue:
Next

##Do Loop文
###While

Do While 条件式
    処理
Loop

Do
    処理
Loop While 条件式

条件がTrueの場合、ループし続けます。
「Do While 条件」の場合、条件に該当しなければループ内を処理しません。
「Loop While 条件」の場合、初回のループ分は処理します。

###Until

Do Until 条件式
    処理
Loop

Do
    処理
Loop Until 条件式

条件がFalseの場合、ループし続けます。
「Do Until 条件」の場合、条件に該当しなければループ内を処理しません。
「Loop Until 条件」の場合、初回のループ分は処理します。

###Do Loop文を抜ける

Do Until 条件式1
    If 条件式2 Then 
        Exit Do ' Do Loopを抜ける
    End If
Loop

###次のループに移る
For文と同じくGoTo文で実現します。

Do Until 条件式1
    If 条件式2 Then 
        GoTo Continue ' Continue:の行にジャンプします
    End If
    
Continue:
Loop

#配列
##定義方法

Dim 配列名() As データ型

##使い方

Dim hoge(2) As String
hoge(0) = "りんご"
hoge(1) = "みかん"
hoge(2) = "バナナ"

##便利な関数
###LBound関数
LBoundは、配列の最小のインデックスを取得します。

LBound(配列) ' 配列の最小のインデックスを返す。
LBound(配列, 次元) ' 指定した次元の最小のインデックスを返す。

###UBound関数
UBound 関数は、配列の最大インデックスを返します。

UBound(配列) ' 配列の最大のインデックスを返す。
UBound(配列, 次元) ' 指定した次元の最大のインデックスを返す。

#コレクション
##定義方法

Dim hoges As Collection
Set hoges = New Collection
' または
Dim hoges As New Collection

##使用できるメソッド
コレクションには専用のメソッド・プロパティが用意されています。

###Addメソッド
インスタンス化したコレクションオブジェクトにメンバを追加します。

書式は以下の通りです。名前付き引数でitem, key, before, afterを指定出来ます。

コレクションオブジェクト. Add 追加するオブジェクト

コレクションオブジェクト. Add item := 追加するオブジェクト, key := 1, before := 1, after := 1
引数名 必/任 説明
item 必須 追加するオブジェクトを指定します。
key 任意 コレクションオブジェクトの各メンバの位置を表すインデックスの代わりに重複しない文字列を指定出来ます。
before 任意 コレクションオブジェクト内での相対的な位置を表す値を指定します。
インデックスを使用している場合、1~Countプロパティの値までの範囲を指定出来ます。
beforeとafterを同時に指定することはできません。
after 任意 インデックスを使用している場合、1~Countプロパティの値までの範囲を指定出来ます。
beforeとafterを同時に指定することはできません。

###Itemメソッド
指定した位置または文字列に対応するコレクションオブジェクトのメンバを取得します。

コレクションオブジェクト.Item(index)

###Removeメソッド
コレクションオブジェクトからメンバを削除します。

コレクションオブジェクト.Remove (index)

##Countプロパティ
コレクションオブジェクトのメンバ数を取得出来ます。

コレクションオブジェクト.Count

#メッセージダイアログ

MsgBox "りんご"

#ブック、シート、セル操作系のchips
「hoge.xlsx」の「Sheet1」シートをアクティブ化する

Workbooks("hoge.xlsx").Worksheets("Sheet1").Activate

現在アクティブのブックと同フォルダに存在する「hoge.xlsx」を開く

Workbooks.Open(ThisWorkbook.Path & "\hoge.xlsx")

「Sheet1」シートのWorksheetオブジェクトを取得する

Worksheets("Sheet1")

「Sheet1」シートのA1セルに「りんご」と書き込む

Worksheets("Sheet1").Range("A1").Value = "りんご"

「Sheet1」シートのC5セルに「りんご」と書き込む

Worksheets("Sheet1").Cells(5, 3).Value="EXCEL VBA"

現在のマクロが実行されているブックのブック名を取得する

ThisWorkbook.Name

#参考文献

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?