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

Excel VBA入門【業務自動化の第一歩】のアイキャッチ画像
目次

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

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


VBAとは

概要

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

できること:

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

メリット・デメリット

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

VBAを始める準備

開発タブの表示

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

VBEの起動

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

VBEの画面構成

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

標準モジュールの追加

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

基本的な構文

プロシージャ(Sub)

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

変数の宣言

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)

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)

Sub ForExample()
    Dim i As Long

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

繰り返し(For Each)

Sub ForEachExample()
    Dim ws As Worksheet

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

繰り返し(Do While)

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

セルの操作

セルの参照方法

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

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

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

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

値の取得と設定

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

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

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

行・列の操作

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

書式設定

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: データの集計

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: 条件に合うデータを抽出

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: 複数ファイルの一括処理

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: 日報の自動生成

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:中断

変数の確認

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

' または
MsgBox variable

エラーハンドリング

Sub ErrorHandlingExample()
    On Error GoTo ErrorHandler

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

    Exit Sub

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

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

画面更新の制御

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

    ' 処理
    ' ...

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

変数の宣言を強制

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

コメントの記述

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

まとめ

VBA習得のステップ

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

よく使う構文

' 変数宣言
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自動化についてのご相談は、お気軽にお問い合わせください。

お問い合わせはこちら →


最終更新: 2025年1月

この記事をシェア

関連デモ・ツール

技術選定からご相談ください

発注範囲が決まっていなくても、現在の業務と判断したいことから整理します。

相談内容を送る

GIS・AI・業務自動化に関するご相談は お問い合わせページ からお気軽にどうぞ。