VBA(Visual Basic for Applications)の概要と使い方
Microsoft Office(Excel、Word、Access など)の自動化や拡張機能を開発するためのプログラミング言語であるVBA(Visual Basic for Applications)について。
よく使う変数の宣言や、制御文一覧。コピペで使えるサンプルコードをチートシートとしてまとめました。
VBAの基本仕様
- プラットフォーム: Microsoft Office製品
- 統合開発環境(IDE): 「VBAエディター」(Alt + F11で開く)
- 実行単位: マクロ(Sub) と 関数(Function)
- オブジェクト指向: Excelのワークブック、シート、セルなどをオブジェクトとして操作
- データ型:
Integer
(整数)Long
(大きな整数)Double
(小数)String
(文字列)Boolean
(真偽値)Variant
(任意の型)
- 制御構文:
If ... Then ... Else
For ... Next
Do ... Loop
Select Case
Select Case
Select Case
変数とデータ型の宣言
VBAでは、変数を宣言してデータを格納します。データ型には、数値、文字列、ブール値などがあり、それぞれ適切な型を選んで宣言します。
データ型:
Integer
(整数)Long
(大きな整数)Double
(小数)String
(文字列)Boolean
(真偽値)Variant
(任意の型)
データ型 | 説明 | サンプル値 |
---|---|---|
Integer | 整数(-32,768 ~ 32,767) | 100 |
Long | 大きな整数(約21億まで) | 1000000 |
Single | 単精度浮動小数点数 | 3.14 |
Double | 倍精度浮動小数点数 | 3.141592 |
String | 文字列 | “Hello” |
Boolean | 真(True)または偽(False) | True |
Date | 日付 | #2024/04/01# |
Variant | 任意のデータ型(非推奨) | 123 や “ABC” |
変数の宣言(サンプルコード)
Dim num As Integer
Dim name As String
Dim isValid As Boolean
num = 10
name = "VBAプログラム"
isValid = True
制御構文 繰り返しや条件分岐
VBAでは、条件分岐や繰り返しを使って、柔軟な処理を記述できます。
制御構文:
If ... Then ... Else
For ... Next
Do ... Loop
Select Case
条件分岐(If文)
Dim score As Integer
score = 80
If score >= 90 Then
MsgBox "優秀です"
ElseIf score >= 70 Then
MsgBox "合格です"
Else
MsgBox "不合格です"
End If
条件分岐(Select Case)
Dim grade As String
grade = "B"
Select Case grade
Case "A"
MsgBox "最高評価"
Case "B"
MsgBox "良い成績"
Case "C"
MsgBox "普通"
Case Else
MsgBox "評価なし"
End Select
繰り返し処理(Forループ)
Dim i As Integer
For i = 1 To 5
Debug.Print "回数: " & i
Next i
繰り返し処理(Whileループ)
Dim num As Integer
num = 1
Do While num <= 5
Debug.Print "現在の数値: " & num
num = num + 1
Loop
関数 Function と Sub の違い・使い分け
関数 Function と Sub
VBAでは、処理をまとめた関数を定義し、呼び出して使用します。
Sub
はサブルーチン
- 目的:処理を実行するためのブロック。戻り値を返さない。
- 使い方:主に処理を行いたい時に使用。
- 特徴:値を返さず、直接実行する。
- 単純な処理ならsubだけで完結する。
Sub DisplayMessage()
MsgBox "Hello, World!"
End Sub
Function
は関数。引数を受け取り、戻り値を返せる。
- 目的:処理を実行して、値を返す(戻り値を使える)。
- 使い方:何度も繰り返したい処理や、他から参照する必要がある時に使用。
- 特徴:戻り値を返し、その結果を他の場所で使用できる。
- 複雑で高度な処理に役立つ
Function AddNumbers(a As Integer, b As Integer) As Integer
AddNumbers = a + b
End Function
Subから戻り値付きでFunction
を呼び出すサンプル
以下は、Subから戻り値を返すFunction
を呼び出す例です。
1. 関数(Function)を定義する
まず、Function
を定義します。以下の例では、2つの数値を足し合わせてその結果を返す関数 AddNumbers
を定義しています。
Function AddNumbers(a As Integer, b As Integer) As Integer
AddNumbers = a + b ' 計算結果を返す
End Function
AddNumbers(整数a, 整数b)を受け取り、a+bの結果を返す。
引数を受け取ると同時に、型を宣言している。 (宣言:A As Integer整数,B As Integer整数)
2.Subから Function
を呼び出す
次に、このFunction
を別のSub
から呼び出し、戻り値を使用します。
Sub CallAddNumbers()
Dim result As Integer
' AddNumbers関数を呼び出して、戻り値をresultに格納
result = AddNumbers(5, 10)
' 結果を表示
MsgBox "The sum is: " & result
End Sub
result = AddNumbers(5, 10) で、関数を呼び出している。
3. Sub CallAddNumbers()の実行結果
The sum is: 15
メッセージボックスに、5+10の計算結果が表示される。
実行の流れ
- Sub
CallAddNumbers
が実行されると、FunctionAddNumbers
が呼び出され、5と10を足した結果(15)がresult
に格納され、Subに返されます。 - その後Sub
CallAddNumbers
内のコードでresult
として計算結果を使用できます。
引数なしの関数(Function)例
関数 GetMessage() を定義する例。関数名の後の()が空。
Function GetMessage() As String
GetMessage = "こんにちは、VBA!"
End Function
Sub Test()
MsgBox GetMessage()
End Sub
引数ありの関数(Function)
関数内で引数を使用。関数名の後の(a As Integer, b As Integer)で宣言した引数をSubから受け取れる。
Subから呼び出すときはAddNumbers(整数A, 整数B)
Function AddNumbers(a As Integer, b As Integer) As Integer
AddNumbers = a + b
End Function
Sub Test()
MsgBox AddNumbers(5, 3) ' 8
End Sub
配列の使用
配列は複数のデータをまとめて扱うために使用します。
固定長配列
Dim fruits(2) As String
fruits(0) = "りんご"
fruits(1) = "バナナ"
fruits(2) = "みかん"
Debug.Print fruits(1) ' バナナ
動的配列
Dim numbers() As Integer
ReDim numbers(4) ' 5個の要素を確保
numbers(0) = 10
numbers(1) = 20
Debug.Print numbers(1) ' 20
VBADim
変数の宣言
VBAではDim
で「変数の宣言」を行行います。
宣言の目的:変数の名前とデータ型(型)を指定し、より効率的で管理しやすいプログラムを作成するため。
Dim
の基本構文
Dim 変数名 As データ型
- 変数名:変数に付ける名前(英数字、アンダースコアで構成される)。
- データ型:変数が保持するデータの種類(例えば、
Integer
やString
など)。
例1:整数型(Integer)の変数宣言
Dim score As Integer
ここでは、score
という名前の変数を整数型(Integer
)として宣言しています。
例2:文字列型(String)の変数宣言
Dim name As String
name
という文字列型(String
)の変数を宣言しています。
複数の変数を1行で同時宣言
Dim
を使って、複数の変数を一度に宣言することも可能です。
Dim num1 As Integer, num2 As Integer, num3 As Integer
このコードでは、num1
、num2
、num3
という3つの整数型変数を同時に宣言しています。
Dim
とAs
の役割
Dim
:変数の宣言を行うキーワード。VBAでは必ず宣言時にDim
を使います。As
:変数のデータ型を指定する際に使います。
Dim 変数名 As データ型
Dim
で宣言した変数の初期値
VBAでは、変数をDim
で宣言すると、初期値が自動的に設定されます。初期値は、データ型によって異なります。
データ型 | 初期値 |
---|---|
Integer | 0 |
Long | 0 |
Single | 0 |
Double | 0 |
String | 空文字列 ("" ) |
Boolean | False |
Variant | Empty |
Object | Nothing |
例:初期値の確認
Dim count As Integer
Dim name As String
Debug.Print count ' 0
Debug.Print name ' 空文字列
このコードでは、count
は初期値0、name
は初期値の空文字列となります。
Dim
の使用例
変数を宣言し、その後に値を代入して使用する例を見てみましょう。
整数型の変数を使う例
Dim age As Integer
age = 30
MsgBox "年齢は " & age & " 歳です"
age
という変数に30を代入し、メッセージボックスでその内容を表示します。
文字列型の変数を使う例
Dim name As String
name = "田中"
MsgBox "名前は " & name
name
に「田中」を代入して、それをメッセージボックスで表示します。
ローカル変数(Dim)とグローバル変数(Public)
Dim
は基本的にローカル変数を宣言するために使いますが、Public
やPrivate
と組み合わせることでグローバル変数やモジュール内でのみ有効な変数を宣言することができます。
ローカル変数(Dim)
モジュール内でのみ有効な変数を宣言します。
Dim x As Integer ' モジュール内でのみ有効
グローバル変数(Public)
モジュール間で使用する変数を宣言します。
Public y As Integer ' 他のモジュールでも使用可能
モジュール内限定変数(Private)
モジュール内のみで使用する変数を宣言します。
Private z As Integer ' モジュール外からはアクセスできない
Dim
とReDim
の違い
Dim
は変数の宣言に使いますが、配列の場合、ReDim
を使って配列のサイズを動的に変更できます。
配列の宣言
Dim numbers(5) As Integer ' 長さ5の配列
配列のサイズ変更(ReDim)
ReDim numbers(10) ' 配列のサイズを10に変更
ReDim
を使うことで、配列のサイズを後から変更できます。ただし、既存の配列の内容はリセットされるため、データを保持したままサイズ変更したい場合は、ReDim Preserve
を使用します。
ReDim Preserve numbers(10) ' 配列の内容を保持したままサイズ変更
ワークシート操作 シートから値を取得
Excelのセルやシートを操作する基本的なコードを紹介します。
セルの値を取得・設定
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
ws.Cells(1, 1).Value = "Hello"
Debug.Print ws.Cells(1, 1).Value
行や列の操作
Rows(1).Delete ' 1行目を削除
Columns("B").Insert ' B列を挿入
ファイルの操作
VBAでは、ファイルの読み書きを行うことも可能です。
テキストファイルの読み込み
Dim filePath As String
Dim fileNumber As Integer
Dim textLine As String
filePath = "C:\test\sample.txt"
fileNumber = FreeFile
Open filePath For Input As #fileNumber
Do Until EOF(fileNumber)
Line Input #fileNumber, textLine
Debug.Print textLine
Loop
Close #fileNumber
テキストファイルの書き込み
Dim fileNumber As Integer
fileNumber = FreeFile
Open "C:\test\output.txt" For Output As #fileNumber
Print #fileNumber, "VBAでファイルに書き込み"
Close #fileNumber
メッセージボックス & ユーザーフォーム
メッセージボックス
MsgBox "処理が完了しました", vbInformation, "完了"
入力ボックス
Dim userInput As String
userInput = InputBox("名前を入力してください")
MsgBox "入力された名前: " & userInput
エラーハンドリング
VBAでは、予期しないエラーを防ぐために On Error
を使用できます。
エラー処理の基本
On Error Resume Next ' エラーが発生しても継続
Debug.Print 10 / 0 ' エラー発生
On Error GoTo 0 ' エラーハンドリングを解除
エラーをキャッチして処理
Sub SafeDivision()
On Error GoTo ErrorHandler
Dim result As Double
result = 10 / 0 ' エラー発生
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description
End Sube
コメント