Excel VBA入門

Excel VBAを使えば、繰り返し作業を自動化できます。

Excel VBA入門【業務自動化の第一歩】

この記事では、VBAの基礎から実践的な使い方まで、初心者向けに解説します。

VBAとは

概要

VBA(Visual Basic for Applications) は、Microsoft Office製品で使えるプログラミング言語です。

できること

  • Excelの操作を自動化
  • 繰り返し作業の効率化
  • カスタム関数の作成
  • フォームの作成

メリット・デメリット

メリット デメリット
Excelがあれば追加費用なし Excel/Windowsのみ
学習コストが比較的低い 大規模処理には不向き
業務に直結した自動化 バージョン依存の場合あり

VBAを始める準備

開発タブの表示

手順

  • ファイル → オプション
  • リボンのユーザー設定
  • 「開発」にチェック
  • OK

VBEの起動

開発タブ → Visual Basic
または
Alt + F11

VBEの画面構成

┌─────────────────────────────────────┐
│  メニューバー                        │
├──────────┬──────────────────────────┤
│ プロジェクト│                          │
│ エクスプ   │     コードウィンドウ       │
│ ローラー   │                          │
├──────────┤                          │
│ プロパティ │                          │
│ ウィンドウ │                          │
└──────────┴──────────────────────────┘

標準モジュールの追加

手順

  • プロジェクトエクスプローラで右クリック
  • 挿入 → 標準モジュール
  • コードを記述

基本的な構文

プロシージャ(Sub)

vba
Sub HelloWorld()
    MsgBox "Hello, World!"
End Sub

変数の宣言

vba
Sub VariableExample()
    Dim str As String
    Dim num As Long
    Dim dbl As Double
    Dim flag As Boolean

    str = "文字列"
    num = 100
    dbl = 3.14
    flag = True
End Sub

条件分岐(If)

vba
Sub IfExample()
    Dim score As Long
    score = 80

    If score >= 80 Then
        MsgBox "合格"
    ElseIf score >= 60 Then
        MsgBox "追試"
    Else
        MsgBox "不合格"
    End If
End Sub

繰り返し(For)

vba
Sub ForExample()
    Dim i As Long

    For i = 1 To 10
        Cells(i, 1).Value = i
    Next i
End Sub

繰り返し(For Each)

vba
Sub ForEachExample()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        Debug.Print ws.Name
    Next ws
End Sub

繰り返し(Do While)

vba
Sub DoWhileExample()
    Dim i As Long
    i = 1

    Do While Cells(i, 1).Value <> ""
        Debug.Print Cells(i, 1).Value
        i = i + 1
    Loop
End Sub

セルの操作

セルの参照方法

vba
' A1セルを参照
Range("A1").Value = "Hello"

' 行・列で参照(行, 列)
Cells(1, 1).Value = "Hello"

' 複数セルを参照
Range("A1:C3").Value = 1

' 名前付き範囲
Range("データ範囲").Value = 0

値の取得と設定

vba
Sub CellValueExample()
    ' 値を取得
    Dim value As Variant
    value = Range("A1").Value

    ' 値を設定
    Range("B1").Value = value * 2

    ' 数式を設定
    Range("C1").Formula = "=A1+B1"
End Sub

行・列の操作

vba
Sub RowColumnExample()
    ' 最終行を取得
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ' 最終列を取得
    Dim lastCol As Long
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column

    ' 行の挿入
    Rows(5).Insert

    ' 列の削除
    Columns("B").Delete
End Sub

書式設定

vba
Sub FormatExample()
    With Range("A1")
        .Font.Bold = True
        .Font.Size = 14
        .Font.Color = RGB(255, 0, 0)
        .Interior.Color = RGB(255, 255, 0)
    End With
End Sub

実践的なマクロ例

例1: データの集計

vba
Sub SumData()
    Dim lastRow As Long
    Dim total As Double
    Dim i As Long

    ' 最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ' 合計を計算
    total = 0
    For i = 2 To lastRow
        total = total + Cells(i, 2).Value
    Next i

    ' 結果を出力
    Cells(lastRow + 1, 1).Value = "合計"
    Cells(lastRow + 1, 2).Value = total
End Sub

例2: 条件に合うデータを抽出

vba
Sub ExtractData()
    Dim srcSheet As Worksheet
    Dim dstSheet As Worksheet
    Dim srcRow As Long, dstRow As Long
    Dim lastRow As Long

    Set srcSheet = Sheets("元データ")
    Set dstSheet = Sheets("抽出結果")

    ' 抽出先をクリア
    dstSheet.Cells.Clear

    ' ヘッダーをコピー
    srcSheet.Rows(1).Copy dstSheet.Rows(1)

    ' データを抽出
    lastRow = srcSheet.Cells(Rows.Count, 1).End(xlUp).Row
    dstRow = 2

    For srcRow = 2 To lastRow
        If srcSheet.Cells(srcRow, 3).Value >= 100 Then
            srcSheet.Rows(srcRow).Copy dstSheet.Rows(dstRow)
            dstRow = dstRow + 1
        End If
    Next srcRow

    MsgBox dstRow - 2 & "件を抽出しました"
End Sub

例3: 複数ファイルの一括処理

vba
Sub ProcessMultipleFiles()
    Dim folderPath As String
    Dim fileName As String
    Dim wb As Workbook
    Dim summary As Range
    Dim rowNum As Long

    folderPath = "C:\data\"
    fileName = Dir(folderPath & "*.xlsx")
    rowNum = 2

    ' 結果シートの準備
    Set summary = ThisWorkbook.Sheets("集計").Range("A1")
    summary.Value = "ファイル名"
    summary.Offset(0, 1).Value = "合計"

    ' 各ファイルを処理
    Do While fileName <> ""
        Set wb = Workbooks.Open(folderPath & fileName)

        ' 処理(例:B列の合計)
        summary.Offset(rowNum - 1, 0).Value = fileName
        summary.Offset(rowNum - 1, 1).Value = _
            Application.WorksheetFunction.Sum(wb.Sheets(1).Range("B:B"))

        wb.Close SaveChanges:=False
        rowNum = rowNum + 1
        fileName = Dir()
    Loop

    MsgBox "処理が完了しました"
End Sub

例4: 日報の自動生成

vba
Sub CreateDailyReport()
    Dim ws As Worksheet
    Dim reportDate As Date

    reportDate = Date

    ' 新しいシートを作成
    Set ws = ThisWorkbook.Sheets.Add
    ws.Name = Format(reportDate, "yyyymmdd") & "_日報"

    ' テンプレートを作成
    With ws
        .Range("A1").Value = "日報"
        .Range("A1").Font.Size = 16
        .Range("A1").Font.Bold = True

        .Range("A3").Value = "日付:"
        .Range("B3").Value = reportDate

        .Range("A5").Value = "作業内容:"
        .Range("A7").Value = "明日の予定:"
        .Range("A9").Value = "備考:"
    End With

    MsgBox "日報を作成しました"
End Sub

デバッグ方法

ブレークポイント

コード行の左端をクリック
→ 赤い丸が表示される
→ 実行時にそこで停止

ステップ実行

ショートカットキー

  • F8:1行ずつ実行
  • F5:続けて実行
  • Ctrl+Break:中断

変数の確認

vba
' イミディエイトウィンドウに出力
Debug.Print variable

' または
MsgBox variable

エラーハンドリング

vba
Sub ErrorHandlingExample()
    On Error GoTo ErrorHandler

    ' 処理
    Dim result As Double
    result = 1 / 0  ' エラー発生

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description
End Sub

注意点とベストプラクティス

画面更新の制御

vba
Sub FastProcess()
    ' 処理を高速化
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    ' 処理
    ' ...

    ' 元に戻す
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

変数の宣言を強制

vba
' モジュールの先頭に記述
Option Explicit

コメントの記述

vba
'==================================
' 機能:売上データを集計する
' 引数:なし
' 戻値:なし
' 作成:2025/01/01
'==================================
Sub SumSales()
    ' 処理
End Sub

まとめ

VBA習得のステップ

学習の流れ

  • マクロの記録で動作を理解
  • 記録されたコードを読む
  • 簡単な処理を手書き
  • 徐々に複雑な処理へ

よく使う構文

vba
' 変数宣言
Dim x As Long

' セル操作
Range("A1").Value = 1
Cells(1, 1).Value = 1

' 繰り返し
For i = 1 To 10
Next i

' 条件分岐
If x > 0 Then
End If

関連記事

お問い合わせ

VBA・Excel自動化についてのご相談は、お気軽にお問い合わせください。

  • マクロ作成のご依頼
  • VBA研修・講習
  • 業務自動化の相談

お問い合わせはこちら

最終更新: 2025年1月