この資料は、VBA(Visual Basic for Applications)プログラミングをこれから始める方を対象とした入門ガイドです。VBAの基本的な概念から、プログラミングの第一歩、Excelでの実践的な活用方法までを分かりやすく解説します。
VBAは、Microsoft Office製品(Excel, Word, PowerPoint, Accessなど)に搭載されているプログラミング言語です。VBAを使うと、普段手作業で行っているOfficeの操作を自動化したり、Office製品の機能を拡張したりすることができます。
VBAのコードを書くための専用の画面をVBE(Visual Basic Editor)と呼びます。VBEを起動する方法を見ていきましょう。
これでExcelのリボンに「開発」タブが表示されます。
これでVBAのコードを書くためのVBEウィンドウが開きます。
ショートカットキー: VBEは Alt + F11
キーを押すことでも簡単に起動できます。
プログラミングの知識がなくても、Excelの操作をVBAコードに変換できる「マクロの記録」機能を使ってみましょう。これはVBAの学習に非常に役立ちます。
MyFirstMacro
)。Ctrl+Shift+M
)。「OK」をクリックすると記録が開始されます。
Alt + F11
)。Sub MyFirstMacro()
' MyFirstMacro Macro
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "こんにちは、VBA!"
Range("B2").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
End Sub
ポイント: マクロの記録はVBAコードの学習に非常に有効です。複雑な操作を記録し、そのコードを読み解くことで、VBAの書き方を学ぶことができます。
VBAのコードを書く上で最低限知っておくべき基本的な文法について学びましょう。
変数とは、データを一時的に保存しておくための「箱」のようなものです。VBAでは、変数を宣言してから使うのが一般的です。
Sub VariableExample()
Dim userName As String ' 文字列を格納する変数
Dim userAge As Integer ' 整数を格納する変数
userName = "太郎"
userAge = 30
' 変数の値をメッセージボックスに表示
MsgBox userName & "さんの年齢は" & userAge & "歳です。"
End Sub
データ型 | 説明 | 例 |
---|---|---|
String |
文字列 | "こんにちは" , "Excel" |
Integer |
整数 (-32,768 ~ 32,767) | 10 , -5 |
Long |
大きな整数 | 100000 |
Double |
小数(浮動小数点数) | 3.14 , 99.5 |
Boolean |
真偽値(True または False ) |
True , False |
Date |
日付と時刻 | #2025/01/01# |
Variant |
任意の種類のデータ(明示的な型指定がない場合) | (何でも入るが、パフォーマンスは劣る) |
Dimステートメント: Dim 変数名 As データ型
の形式で変数を宣言します。変数を宣言すると、プログラムが読みやすくなり、エラーを防ぐことができます。
コードの途中に説明文を入れることをコメントと呼びます。VBAでは、アポストロフィ ('
) または Rem
で行頭を始めることでコメントになります。コメントはプログラムの実行には影響しません。
Sub CommentExample()
' この行はコメントです。
Dim myNumber As Integer ' myNumberという名前の整数型変数を宣言
myNumber = 10 ' myNumberに10を代入
' Rem ここもコメントです
MsgBox myNumber
End Sub
特定の条件が満たされたときに、異なる処理を実行させたい場合に使います。
Sub IfStatementExample()
Dim score As Integer
score = 75
If score >= 80 Then
MsgBox "合格です!"
ElseIf score >= 60 Then ' 80未満だが60以上の場合
MsgBox "もう少し頑張りましょう。"
Else ' 60未満の場合
MsgBox "不合格です。"
End If
End Sub
同じ処理を何度も繰り返したい場合に使います。
指定した回数だけ繰り返す場合に便利です。
Sub ForLoopExample()
Dim i As Integer
For i = 1 To 5 ' iが1から5まで1ずつ増えながら繰り返す
Cells(i, 1).Value = i ' i行1列(A列)のセルにiの値を入力
Next i
MsgBox "A1からA5まで数値が入力されました。"
End Sub
特定の条件が満たされている間、繰り返す場合に便利です。
Sub DoWhileLoopExample()
Dim count As Integer
count = 1
Do While count <= 3 ' countが3以下の間繰り返す
MsgBox "現在のカウント: " & count
count = count + 1
Loop
MsgBox "繰り返しが終了しました。"
End Sub
VBAの真価は、Excelのシートやセルなどをコードから直接操作できる点にあります。Excelの各要素は「オブジェクト」として扱われます。
セルやセルの範囲を操作する際に最もよく使われるオブジェクトです。
Sub RangeExample()
' A1セルに値を入力
Range("A1").Value = "Hello VBA!"
' B2セルに現在の時間を入力
Range("B2").Value = Now()
' C3セルに数式を入力
Range("C3").Formula = "=A1&"" ""&B2"
' D1からD5の範囲に連番を入力
Range("D1:D5").Value = 100
' E1セルを選択して色を付ける
Range("E1").Select
Selection.Interior.Color = RGB(255, 255, 0) ' 黄色
' F列の幅を自動調整
Columns("F").AutoFit
' アクティブなシートのA1にアクセス
ActiveSheet.Range("A1").Value = "アクティブシート"
End Sub
.Value
: セルの値を取得したり設定したりします。
.Formula
: セルに数式を設定します。
.Select
: セルを選択します。選択したセルはSelection
で参照できます。
RGB(R,G,B)
: 色をRGB値で指定できます(赤,緑,青)。0〜255の値を指定します。
ワークシート全体を操作します。
Sub WorksheetExample()
' "Sheet1"という名前のシートを選択
Worksheets("Sheet1").Select
' 新しいシートを追加
Worksheets.Add.Name = "新しいシート"
' 現在アクティブなシートの名前を取得してメッセージボックスに表示
MsgBox ActiveSheet.Name
' "データ"という名前のシートを非表示にする
' Worksheets("データ").Visible = xlSheetHidden
' 全てのシートをループ処理
Dim ws As Worksheet
For Each ws In Worksheets
Debug.Print ws.Name ' イミディエイトウィンドウにシート名を表示
Next ws
End Sub
イミディエイトウィンドウ: VBEの「表示」メニューから「イミディエイトウィンドウ」を選択すると表示されます。Debug.Print
で出力した内容が表示され、デバッグに非常に便利です。
Excelファイル全体を操作します。
Sub WorkbookExample()
' 現在開いているブックの名前を表示
MsgBox ActiveWorkbook.Name
' 新しいブックを作成
Workbooks.Add
' 現在のブックを保存(上書き)
' ActiveWorkbook.Save
' 名前を付けて保存
' ActiveWorkbook.SaveAs "C:\Users\YourUser\Documents\新しいブック.xlsx"
' 現在のブックを閉じる(保存するか聞かずに閉じる場合はFalse)
' ActiveWorkbook.Close SaveChanges:=False
End Sub
注意: Save
や Close
など、ファイル操作を伴うコードを実行する際は、誤って重要なファイルを上書きしたり削除したりしないよう、細心の注意を払ってください。特に、初心者のうちは必ずテスト用のファイルで試しましょう。
これまでに学んだことを使って、簡単なマクロを作成してみましょう。
Sub GreetingMacro()
Dim name As String
Dim greetingMessage As String
' A1セルの値を変数nameに格納
name = Range("A1").Value
' A1が空っぽかどうかでメッセージを分岐
If name = "" Then
greetingMessage = "名前が入力されていません。"
Else
greetingMessage = "こんにちは、" & name & "さん!"
End If
' メッセージボックスで表示
MsgBox greetingMessage
End Sub
使い方:
F5
キーを押してマクロを実行します。A列に数値が入力されているとして、その合計をB1セルに表示するマクロです。
Sub SumColumnA()
Dim lastRow As Long
Dim total As Double
' A列の最終行を取得(データがある最後のセル)
' Rows.Count は Excel の全行数を取得
' End(xlUp) はデータがある一番上のセルまで移動
' .Row はそのセルの行番号を取得
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
' A1セルから最終行までの合計を計算
total = Application.WorksheetFunction.Sum(Range("A1:A" & lastRow))
' B1セルに合計値を表示
Range("B1").Value = "A列の合計: " & total
MsgBox "合計がB1に計算されました。"
End Sub
使い方:
Application.WorksheetFunction.Sum
: VBAからExcelの関数(SUM関数など)を呼び出すことができます。これは非常に強力な機能です。
プログラミングでは、エラーはつきものです。エラーを修正する作業を「デバッグ」と呼びます。
F8
キーを押すと、1行ずつコードを実行できます。これにより、各行の処理内容や変数の変化を確認できます。Debug.Print 変数名
で、変数の値をイミディエイトウィンドウに出力できます。?変数名
と入力して Enter
キーを押すことでも、実行中の変数の値を確認できます。作成したマクロを実行する方法はいくつかあります。
F5
キーを押すか、ツールバーの「実行」ボタンをクリックします。VBAマクロを含むExcelファイルを保存する際には、特別な形式で保存する必要があります。
重要: .xlsx
形式(通常のExcelファイル)で保存すると、作成したVBAマクロが全て失われます。 必ず.xlsm
形式で保存してください。
この資料でVBAの基本的な部分に触れました。さらに学習を進めるためのヒントをいくつかご紹介します。
MsgBox
, InputBox
, Format
, Left
, Right
など、VBA独自の便利な関数がたくさんあります。On Error GoTo
などのエラー処理の記述方法を学びましょう。VBAは、日々の業務を劇的に効率化できる強力なツールです。焦らず、少しずつでも毎日コードに触れてみることが、プログラミング習得の秘訣です。