Excel VBA 基本の仕様。変数の宣言と繰り返し制御文一覧。コピペで使える基本のサンプルコード。VBAチートシート

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の計算結果が表示される。

実行の流れ

  • SubCallAddNumbersが実行されると、FunctionAddNumbersが呼び出され、5と10を足した結果(15)がresultに格納され、Subに返されます。
  • その後SubCallAddNumbers内のコードで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 データ型
  • 変数名:変数に付ける名前(英数字、アンダースコアで構成される)。
  • データ型:変数が保持するデータの種類(例えば、IntegerStringなど)。

例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

このコードでは、num1num2num3という3つの整数型変数を同時に宣言しています。

DimAsの役割

  • Dim:変数の宣言を行うキーワード。VBAでは必ず宣言時にDimを使います。
  • As:変数のデータ型を指定する際に使います。
Dim 変数名 As データ型

Dimで宣言した変数の初期値

VBAでは、変数をDimで宣言すると、初期値が自動的に設定されます。初期値は、データ型によって異なります。

データ型初期値
Integer0
Long0
Single0
Double0
String空文字列 ("")
BooleanFalse
VariantEmpty
ObjectNothing

例:初期値の確認

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は基本的にローカル変数を宣言するために使いますが、PublicPrivateと組み合わせることでグローバル変数モジュール内でのみ有効な変数を宣言することができます。

ローカル変数(Dim)

モジュール内でのみ有効な変数を宣言します。

Dim x As Integer ' モジュール内でのみ有効

グローバル変数(Public)

モジュール間で使用する変数を宣言します。

Public y As Integer ' 他のモジュールでも使用可能

モジュール内限定変数(Private)

モジュール内のみで使用する変数を宣言します。

Private z As Integer ' モジュール外からはアクセスできない

DimReDimの違い

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

記事について

当サイトは、主に自分用の備忘録として情報をまとめています。個別の質問にはお答えできません。
紹介するコードや設定をご参考の際は、ご自身の責任においてご利用ください。編集や実行によるいかなる損害・不具合についても、当サイトは責任を負いかねます。
必ず事前にバックアップを取り、安全に作業を行ってください。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする