【事例】VBAで帳票作成を自動化

【事例】VBAで帳票作成を自動化のアイキャッチ画像
目次

Excel VBAで繰り返し作業を自動化し、大幅な時間削減を実現した事例を紹介します。

匿名化について: 本記事は、Link Fieldが支援した実案件に基づいています。守秘義務およびプライバシー保護のため、企業名・所在地等を匿名化しています。


企業概要

【業種】設備工事業
【規模】従業員25名
【所在地】地方都市
【主な業務】
・電気設備工事
・空調設備工事
・保守点検業務

導入前の課題

課題1: 見積書作成の手間

【状況】
・Excelで見積書を作成
・過去の見積書をコピーして修正
・計算ミス、転記ミスが発生
・1件あたり30分以上

【件数】
・月平均50件
・月25時間以上の作業

課題2: 請求書発行の負担

【状況】
・月末に請求書を一括作成
・工事台帳からデータを転記
・印刷、PDF化、メール送付
・2人がかりで丸1日

【影響】
・月末の残業
・ミスによるやり直し
・他業務への影響

課題3: 報告書作成

【状況】
・点検報告書を手作業で作成
・写真の貼り付けが面倒
・フォーマットがバラバラ

【影響】
・時間がかかる
・品質にバラつき

導入したソリューション

Excel VBA

【選定理由】
・Excelは既に使用中
・追加費用がかからない
・既存の帳票を活用できる
・社内で保守可能

開発した機能

【見積書自動作成】
・品目マスタからの自動入力
・計算の自動化
・PDF出力・保存

【請求書一括発行】
・工事台帳からデータ取得
・請求書を一括生成
・PDF化・メール送付

【報告書作成支援】
・テンプレート選択
・写真の自動配置
・Excel/PDF出力

導入プロセス

ステップ1: 現状分析(1週間)

【実施内容】
・現在の作業フローを確認
・課題の洗い出し
・自動化ポイントの特定
・優先順位付け

【ポイント】
・実際の作業を観察
・担当者へのヒアリング

ステップ2: 開発(3週間)

【実施内容】
・見積書自動化(1週間)
・請求書一括発行(1週間)
・報告書作成支援(1週間)

【ポイント】
・既存フォーマットを活用
・段階的にリリース

ステップ3: テスト・調整(1週間)

【実施内容】
・実データでテスト
・不具合修正
・使い勝手の改善
・マニュアル作成

ステップ4: 運用開始

【実施内容】
・全担当者への研修
・並行運用期間
・本格運用開始

具体的な機能

機能1: 見積書自動作成

' 見積書作成マクロ
Sub CreateEstimate()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("見積書")

    ' 品目マスタから単価を取得
    Dim itemName As String
    Dim unitPrice As Double
    itemName = ws.Range("B10").Value
    unitPrice = GetUnitPrice(itemName)
    ws.Range("D10").Value = unitPrice

    ' 合計計算
    CalculateTotal

    ' PDF出力
    ExportToPDF ws, CreateFileName()
End Sub

Function GetUnitPrice(itemName As String) As Double
    ' 品目マスタから単価を検索
    Dim masterWs As Worksheet
    Set masterWs = ThisWorkbook.Sheets("品目マスタ")

    Dim lastRow As Long
    lastRow = masterWs.Cells(masterWs.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If masterWs.Cells(i, 1).Value = itemName Then
            GetUnitPrice = masterWs.Cells(i, 2).Value
            Exit Function
        End If
    Next i
End Function

機能2: 請求書一括発行

' 請求書一括発行マクロ
Sub BatchInvoice()
    Dim dataWs As Worksheet
    Dim invoiceWs As Worksheet

    Set dataWs = ThisWorkbook.Sheets("工事台帳")
    Set invoiceWs = ThisWorkbook.Sheets("請求書")

    Dim lastRow As Long
    lastRow = dataWs.Cells(dataWs.Rows.Count, 1).End(xlUp).Row

    ' 各工事について請求書を作成
    For i = 2 To lastRow
        If dataWs.Cells(i, 10).Value = "請求対象" Then
            ' データを請求書にセット
            SetInvoiceData invoiceWs, dataWs, i

            ' PDF保存
            Dim fileName As String
            fileName = "請求書_" & dataWs.Cells(i, 1).Value & ".pdf"
            invoiceWs.ExportAsFixedFormat xlTypePDF, fileName

            ' メール送信
            SendInvoiceEmail dataWs.Cells(i, 5).Value, fileName
        End If
    Next i

    MsgBox "請求書の発行が完了しました"
End Sub

機能3: 報告書作成

' 報告書作成マクロ
Sub CreateReport()
    ' テンプレート選択
    Dim templateName As String
    templateName = InputBox("テンプレートを選択(1:点検、2:工事)")

    ' 写真フォルダ選択
    Dim photoFolder As String
    photoFolder = SelectFolder()

    ' 写真を自動配置
    InsertPhotos photoFolder

    ' PDF出力
    ExportReportToPDF
End Sub

Sub InsertPhotos(folderPath As String)
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("報告書")

    Dim fileName As String
    Dim rowNum As Long
    rowNum = 10  ' 写真配置開始行

    fileName = Dir(folderPath & "\*.jpg")
    Do While fileName <> ""
        ' 写真を挿入
        ws.Pictures.Insert(folderPath & "\" & fileName).Select
        Selection.Top = ws.Cells(rowNum, 2).Top
        Selection.Left = ws.Cells(rowNum, 2).Left
        Selection.Width = 200

        rowNum = rowNum + 15
        fileName = Dir()
    Loop
End Sub

導入効果

定量的効果

項目 導入前 導入後 削減率
見積書作成 30分/件 5分/件 83%
請求書発行 16時間/月 1時間/月 94%
報告書作成 1時間/件 15分/件 75%

年間効果(概算)

【時間削減】
・見積書:250時間/年(50件×25分×12ヶ月)
・請求書:180時間/年(15時間×12ヶ月)
・報告書:150時間/年(45分×200件)
・合計:580時間/年

【金額換算】
580時間 × 2,500円 = 145万円/年

投資対効果

【開発費用】
・外部委託:30万円

【年間効果】
・145万円相当

【回収期間】
・約2.5ヶ月

定性的効果

【品質向上】
・計算ミスゼロ
・フォーマット統一
・転記ミス削減

【働き方改善】
・月末残業の解消
・ストレス軽減
・本来業務に集中

【顧客対応】
・見積回答が早い
・請求書発行が正確

成功のポイント

ポイント1: 既存資産の活用

・現在のExcelフォーマットを使用
・業務フローの大きな変更なし
・学習コストを最小化

ポイント2: 段階的な開発

・効果の高いものから着手
・小さな成功を積み重ねる
・フィードバックを反映

ポイント3: 現場の巻き込み

・担当者と一緒に設計
・使いやすさを重視
・要望を取り入れる

ポイント4: 保守体制

・ソースコードをドキュメント化
・修正方法をマニュアル化
・社内でメンテナンス可能

技術的な工夫

エラーハンドリング

Sub RobustProcess()
    On Error GoTo ErrorHandler

    ' 処理内容
    ' ...

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description
    ' ログに記録
    WriteErrorLog Err.Description
End Sub

ユーザーインターフェース

' ユーザーフォームでわかりやすく
Private Sub btnCreate_Click()
    ' 入力チェック
    If txtCustomer.Value = "" Then
        MsgBox "顧客名を入力してください"
        Exit Sub
    End If

    ' 処理実行
    CreateEstimate
    MsgBox "見積書を作成しました"
End Sub

設定の外部化

' 設定シートで管理
Function GetSetting(settingName As String) As String
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("設定")

    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 1 To lastRow
        If ws.Cells(i, 1).Value = settingName Then
            GetSetting = ws.Cells(i, 2).Value
            Exit Function
        End If
    Next i
End Function

課題と今後

現在の課題

・Excelファイルが大きくなる
・複数人同時編集の制限
・バージョン管理

今後の計画

・Webアプリ化の検討
・データベース連携
・他システムとの連携

担当者の声

【事務担当】
「月末の請求書発行が劇的に楽になりました。
以前は残業が当たり前でしたが、今は定時で
帰れます。」

【営業担当】
「見積書がすぐに出せるようになり、
お客様への回答が早くなりました。
競合に負けることが減った気がします。」

まとめ

導入のポイント

1. 既存Excelを活用
2. 効果の高い業務から着手
3. 現場と一緒に設計
4. 保守体制を整備

得られた効果

・年間145万円相当の効率化
・2.5ヶ月で投資回収
・業務品質の向上
・働き方の改善

参考・一次情報

以下は、本事例で採用した技術・制度・方法論を確認するための参考資料です。匿名化した案件の成果数値を第三者資料で裏づけるものではありません。


関連記事


お問い合わせ

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

お問い合わせはこちら →


最終更新: 2025年1月

この記事をシェア

関連デモ・ツール

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

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

相談内容を送る

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