VBAプログラミング入門(初心者向け)

この資料は、VBA(Visual Basic for Applications)プログラミングをこれから始める方を対象とした入門ガイドです。VBAの基本的な概念から、プログラミングの第一歩、Excelでの実践的な活用方法までを分かりやすく解説します。

1. VBAとは?

VBAは、Microsoft Office製品(Excel, Word, PowerPoint, Accessなど)に搭載されているプログラミング言語です。VBAを使うと、普段手作業で行っているOfficeの操作を自動化したり、Office製品の機能を拡張したりすることができます。

なぜVBAを学ぶのか?

2. 開発環境の準備(VBEの起動)

VBAのコードを書くための専用の画面をVBE(Visual Basic Editor)と呼びます。VBEを起動する方法を見ていきましょう。

VBEを起動する手順

  1. 開発タブの表示:
    • Excelを開き、「ファイル」タブをクリックします。
    • 左側のメニューから「オプション」を選択します。
    • 「Excelのオプション」ダイアログボックスで、「リボンのユーザー設定」を選択します。
    • 右側の「メインタブ」リストにある「開発」のチェックボックスをオンにして、「OK」をクリックします。

    これでExcelのリボンに「開発」タブが表示されます。

  2. VBEの起動:
    • Excelのリボンに表示された「開発」タブをクリックします。
    • 左端にある「Visual Basic」ボタンをクリックします。

    これでVBAのコードを書くためのVBEウィンドウが開きます。

ショートカットキー: VBEは Alt + F11 キーを押すことでも簡単に起動できます。

3. マクロの記録でVBAに触れる

プログラミングの知識がなくても、Excelの操作をVBAコードに変換できる「マクロの記録」機能を使ってみましょう。これはVBAの学習に非常に役立ちます。

マクロを記録する手順

  1. Excelの「開発」タブで「マクロの記録」ボタンをクリックします。
  2. 「マクロの記録」ダイアログボックスが開きます。
    • マクロ名: 好きな名前をつけます(例: MyFirstMacro)。
    • ショートカットキー: 必要であれば設定します(例: Ctrl+Shift+M)。
    • マクロの保存先: 「現在のブック」を選択します。
    • 説明: 任意でマクロの説明を入力します。

    「OK」をクリックすると記録が開始されます。

  3. 操作を実行: Excel上で自動化したい操作を行います。
    • 例: セルA1に「こんにちは、VBA!」と入力する。
    • 例: セルB2の背景色を黄色にする。
  4. Excelの「開発」タブで「記録終了」ボタンをクリックします。

記録されたマクロの確認

  1. VBEを起動します (Alt + F11)。
  2. VBEの左側にある「プロジェクトエクスプローラー」ウィンドウで、「VBAProject (現在のブック名)」の下にある「モジュール」を展開します。
  3. 通常、「標準モジュール」の中に「Module1」が作成されているはずです。それをダブルクリックします。
  4. すると、右側のコードウィンドウに、先ほど行った操作がVBAのコードとして表示されているはずです。
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の書き方を学ぶことができます。

4. VBAの基本的な文法

VBAのコードを書く上で最低限知っておくべき基本的な文法について学びましょう。

4.1. 変数

変数とは、データを一時的に保存しておくための「箱」のようなものです。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 データ型 の形式で変数を宣言します。変数を宣言すると、プログラムが読みやすくなり、エラーを防ぐことができます。

4.2. コメント

コードの途中に説明文を入れることをコメントと呼びます。VBAでは、アポストロフィ (') または Rem で行頭を始めることでコメントになります。コメントはプログラムの実行には影響しません。

Sub CommentExample()
    ' この行はコメントです。
    Dim myNumber As Integer ' myNumberという名前の整数型変数を宣言

    myNumber = 10 ' myNumberに10を代入
    ' Rem ここもコメントです
    MsgBox myNumber
End Sub
            

4.3. 条件分岐 (If...Then...Else)

特定の条件が満たされたときに、異なる処理を実行させたい場合に使います。

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
            

4.4. 繰り返し (For...Next, Do While...Loop)

同じ処理を何度も繰り返したい場合に使います。

For...Next

指定した回数だけ繰り返す場合に便利です。

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
            

Do While...Loop

特定の条件が満たされている間、繰り返す場合に便利です。

Sub DoWhileLoopExample()
    Dim count As Integer
    count = 1

    Do While count <= 3 ' countが3以下の間繰り返す
        MsgBox "現在のカウント: " & count
        count = count + 1
    Loop
    MsgBox "繰り返しが終了しました。"
End Sub
            

5. Excelオブジェクトの操作

VBAの真価は、Excelのシートやセルなどをコードから直接操作できる点にあります。Excelの各要素は「オブジェクト」として扱われます。

5.1. Rangeオブジェクト(セル)

セルやセルの範囲を操作する際に最もよく使われるオブジェクトです。

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の値を指定します。

5.2. Worksheetsオブジェクト(シート)

ワークシート全体を操作します。

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で出力した内容が表示され、デバッグに非常に便利です。

5.3. Workbookオブジェクト(ブック)

Excelファイル全体を操作します。

Sub WorkbookExample()
    ' 現在開いているブックの名前を表示
    MsgBox ActiveWorkbook.Name

    ' 新しいブックを作成
    Workbooks.Add

    ' 現在のブックを保存(上書き)
    ' ActiveWorkbook.Save

    ' 名前を付けて保存
    ' ActiveWorkbook.SaveAs "C:\Users\YourUser\Documents\新しいブック.xlsx"

    ' 現在のブックを閉じる(保存するか聞かずに閉じる場合はFalse)
    ' ActiveWorkbook.Close SaveChanges:=False
End Sub
            

注意: SaveClose など、ファイル操作を伴うコードを実行する際は、誤って重要なファイルを上書きしたり削除したりしないよう、細心の注意を払ってください。特に、初心者のうちは必ずテスト用のファイルで試しましょう。

6. サンプルマクロを作成してみよう

これまでに学んだことを使って、簡単なマクロを作成してみましょう。

例1: セルに入力された値によってメッセージを変えるマクロ

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
            

使い方:

  1. ExcelのA1セルにあなたの名前を入力します。
  2. VBEで上記のコードを貼り付けます。
  3. VBEのツールバーにある「実行」ボタン(緑色の再生ボタン)をクリックするか、F5キーを押してマクロを実行します。
  4. A1に名前が入っていれば「こんにちは、〇〇さん!」、空っぽなら「名前が入力されていません。」と表示されます。

例2: データを自動で集計するマクロ

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
            

使い方:

  1. ExcelのA列にいくつか数値を入力します(例: A1に10, A2に20, A3に30)。
  2. VBEで上記のコードを貼り付けます。
  3. マクロを実行します。
  4. B1セルに「A列の合計: 60」と表示されるはずです。

Application.WorksheetFunction.Sum: VBAからExcelの関数(SUM関数など)を呼び出すことができます。これは非常に強力な機能です。

7. デバッグの基本

プログラミングでは、エラーはつきものです。エラーを修正する作業を「デバッグ」と呼びます。

8. マクロの実行方法

作成したマクロを実行する方法はいくつかあります。

9. マクロ有効ブックとして保存する

VBAマクロを含むExcelファイルを保存する際には、特別な形式で保存する必要があります。

  1. 「ファイル」タブをクリックし、「名前を付けて保存」を選択します。
  2. 保存場所を選択します。
  3. 「ファイルの種類」のドロップダウンリストから、「Excel マクロ有効ブック (*.xlsm)」を選択します。
  4. 「保存」をクリックします。

重要: .xlsx形式(通常のExcelファイル)で保存すると、作成したVBAマクロが全て失われます。 必ず.xlsm形式で保存してください。

10. 次のステップへ

この資料でVBAの基本的な部分に触れました。さらに学習を進めるためのヒントをいくつかご紹介します。

VBAは、日々の業務を劇的に効率化できる強力なツールです。焦らず、少しずつでも毎日コードに触れてみることが、プログラミング習得の秘訣です。

参考資料

目次へ戻る