【VBA業務改善】Excelで残業をゼロにしたマクロ10選

残業が当たり前になっていませんか?
「手作業での集計」「転記ミスのやり直し」「定型作業の繰り返し」……それ、すべてVBAマクロで自動化できます

本記事では、筆者が実際に導入し、残業をほぼゼロにした10のVBAマクロをご紹介します。
現場で即使えるサンプル付きなので、今日から時短を実現できます!


✅ この記事でわかること

  • 時短に効果的なVBAマクロ10選
  • 実務でよくある作業の自動化例
  • マクロ導入のステップと注意点

① 複数ファイルを一括で集計するマクロ

用途: 各部署から集めたExcelファイルを1つにまとめたいとき。

Sub 集計マクロ()
    Dim wb As Workbook, ws As Worksheet, tgtWs As Worksheet
    Dim folderPath As String, fileName As String, lastRow As Long, tgtRow As Long
    folderPath = "C:\集計フォルダ\"
    Set tgtWs = ThisWorkbook.Sheets("集計結果")
    tgtRow = 2

    fileName = Dir(folderPath & "*.xlsx")
    Do While fileName <> ""
        Set wb = Workbooks.Open(folderPath & fileName)
        Set ws = wb.Sheets(1)
        lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
        ws.Range("A2:C" & lastRow).Copy tgtWs.Cells(tgtRow, 1)
        tgtRow = tgtWs.Cells(Rows.Count, 1).End(xlUp).Row + 1
        wb.Close False
        fileName = Dir
    Loop
End Sub

② 定型メールを自動作成するマクロ(Outlook連携)

用途: 毎日送る「日報」「進捗報告メール」などを自動作成。

Sub メール作成()
    Dim olApp As Object, olMail As Object
    Set olApp = CreateObject("Outlook.Application")
    Set olMail = olApp.CreateItem(0)

    With olMail
        .To = "boss@example.com"
        .Subject = "日報のご報告"
        .Body = "本日の作業内容は以下の通りです。" & vbCrLf & "・マクロの作成完了"
        .Display ' 送信するなら .Send
    End With
End Sub

③ シート内の表を自動でPDF保存するマクロ

用途: 請求書や報告書をPDFで送る業務を簡略化。

Sub PDF出力()
    Dim filePath As String
    filePath = ThisWorkbook.Path & "\報告書.pdf"
    Sheets("報告書").ExportAsFixedFormat Type:=xlTypePDF, Filename:=filePath
End Sub

④ 特定条件で行を抽出・別シートに転記するマクロ

用途:「進捗=未完了」のデータだけを抽出して別シートに転記

Sub 条件付き抽出()
    Dim srcWs As Worksheet, tgtWs As Worksheet
    Dim lastRow As Long, tgtRow As Long, i As Long

    Set srcWs = ThisWorkbook.Sheets("データ元")
    Set tgtWs = ThisWorkbook.Sheets("抽出結果")
    
    tgtWs.Cells.ClearContents ' 転記先を初期化

    ' 見出しコピー
    srcWs.Rows(1).Copy tgtWs.Rows(1)
    tgtRow = 2

    lastRow = srcWs.Cells(srcWs.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If srcWs.Cells(i, 3).Value = "未完了" Then
            srcWs.Rows(i).Copy tgtWs.Rows(tgtRow)
            tgtRow = tgtRow + 1
        End If
    Next i
End Sub

🔎 補足:3列目(C列)に「未完了」がある行だけ抽出します。


⑤ フォルダ内のファイル一覧を自動で取得するマクロ

用途:「社内共有フォルダ」などの一覧管理をExcelで自動生成

Sub ファイル一覧取得()
    Dim folderPath As String, fileName As String
    Dim i As Long
    folderPath = "C:\共有フォルダ\" ' ←適宜変更
    If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"

    fileName = Dir(folderPath & "*.*")
    i = 2
    Cells(1, 1).Value = "ファイル名"
    Cells(1, 2).Value = "更新日時"

    Do While fileName <> ""
        Cells(i, 1).Value = fileName
        Cells(i, 2).Value = FileDateTime(folderPath & fileName)
        i = i + 1
        fileName = Dir()
    Loop
End Sub

📁 補足:サブフォルダは含まれません。必要なら再帰処理を追加可能です。


⑥ シフト表や予定表を自動生成するマクロ

用途:曜日ごとにメンバーを割り振るシンプルなシフト表作成

Sub シフト自動生成()
    Dim startDate As Date, i As Long
    Dim members As Variant
    members = Array("佐藤", "鈴木", "高橋", "田中", "伊藤")
    
    startDate = DateSerial(2025, 8, 1) ' 開始日
    For i = 0 To 30 ' 8月分
        Cells(i + 2, 1).Value = startDate + i
        Cells(i + 2, 2).Value = Format(startDate + i, "ddd")
        Cells(i + 2, 3).Value = members(i Mod UBound(members) + 1)
    Next i
    Range("A1:C1").Value = Array("日付", "曜日", "担当者")
End Sub

📆 補足:1か月分の日付に交代でメンバーを自動割当します。


⑦ タスクの進捗状況を色で可視化するマクロ

用途:「完了 → 緑」「遅延 → 赤」などの色分け表示

Sub ステータス色分け()
    Dim ws As Worksheet, lastRow As Long, i As Long
    Set ws = ThisWorkbook.Sheets("タスク一覧")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        Select Case ws.Cells(i, 3).Value
            Case "完了"
                ws.Rows(i).Interior.Color = RGB(204, 255, 204) ' 緑
            Case "進行中"
                ws.Rows(i).Interior.Color = RGB(255, 255, 153) ' 黄色
            Case "遅延"
                ws.Rows(i).Interior.Color = RGB(255, 153, 153) ' 赤
            Case Else
                ws.Rows(i).Interior.ColorIndex = xlNone
        End Select
    Next i
End Sub

🎨 補足:C列にある「ステータス」列を判定基準にしています。


⑧ 毎月の経費精算書を自動作成するマクロ

用途: 日付・項目・金額を入力してPDF化も可能な経費書生成

Sub 経費精算書作成()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("経費テンプレート")
    
    Dim i As Long, rowCount As Long
    rowCount = 10 ' 明細行数
    For i = 1 To rowCount
        ws.Cells(i + 4, 1).Value = DateSerial(2025, 8, i)
        ws.Cells(i + 4, 2).Value = "交通費"
        ws.Cells(i + 4, 3).Value = "○○線 ××駅~△△駅"
        ws.Cells(i + 4, 4).Value = 480
    Next i

    ws.Cells(15, 4).Formula = "=SUM(D5:D14)" ' 合計

    MsgBox "経費精算書を作成しました。"
End Sub

📌 補足:テンプレートの構造に応じて行位置は調整してください。


⑨ 定期バックアップを自動実行するマクロ

用途: 重要ファイルのコピーを日付付きで自動保存

Sub バックアップ作成()
    Dim fso As Object
    Dim srcPath As String, destPath As String
    Dim fileName As String

    srcPath = ThisWorkbook.FullName
    fileName = "backup_" & Format(Now, "yyyymmdd_hhmmss") & ".xlsm"
    destPath = ThisWorkbook.Path & "\" & fileName

    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CopyFile srcPath, destPath

    MsgBox "バックアップを作成しました:" & vbCrLf & destPath
End Sub

🔒 補足:ファイルを上書きせず、日付付きファイル名で保存します。


⑩ Excel起動時に自動処理するマクロ(Workbook_Open)

用途: 開いた瞬間に集計や通知を実行。

Private Sub Workbook_Open()
    MsgBox "おはようございます。今日も頑張りましょう!"
End Sub

🎯 残業ゼロを目指すために

VBAは“プログラミング初心者”でも扱える自動化ツールです。
今回紹介した10個のマクロを使えば、日々の定型業務の8割以上を自動化できます。

✔ スモールスタートのコツ

  • まずは 手作業で時間がかかっている処理 を特定する
  • サンプルコードをそのまま貼り付けて試してみる
  • エラーが出たら少しずつ修正して慣れる

🔗 関連記事(あなたの業務をもっとラクに)


📌 まとめ

No内容効果
1ファイル一括集計月末業務の時間削減
2定型メール作成日報が10秒で完了
3PDF自動保存提出物作成の手間減
4 〜10その他マクロ多数累計で月10時間削減

VBAで仕事を“時短化”し、自分の時間を取り戻しましょう!

転職でキャリアを加速させたいあなたへ

「今の職場に限界を感じている」「もっと評価される場所で働きたい」そんなあなたに向けて、転職成功の実践ノウハウと退職時の不安を解消するサポート情報をまとめました。

転職・退職で迷っている方へ。不安を解消し、自信を持って次のキャリアへ踏み出しましょう。

タイトルとURLをコピーしました