MENU

Excel VBA 事務職の自動化 具体例5選|コピペで使えるコードつき

  • URLをコピーしました!
ExcelのVBAコードを使って事務職の業務を自動化しているイメージ

📷 Photo by Unsplash(商用利用可・無料)

「VBAって難しそう」「コードが書けない」——その通りです。コードをゼロから書くのは難しい。でもコピペして少し直すだけなら、今日から使えます

私はSIerでSEとして10年以上、業務システムの開発・自動化に携わってきました。学校事務職員に転職してからも、VBAで職場の業務を自動化しています。この記事では、事務職の実務でそのまま使えるVBAコードを5パターン、コピペ可能な状態で紹介します。

前回のマクロ記録入門記事の「次のステップ」として、条件分岐・ループ・PDF出力など、マクロの記録だけでは実現できない処理を扱います。

マクロの記録は試してみたんですが、「もし〇〇なら」という処理ができなくて困っていました。
それがまさにVBAの出番です。条件分岐・ループ・自動ファイル名など、マクロの記録の限界を超えた処理がコピペで使えるようになります。

VBAコードの貼り付け方(共通手順)

以下のコードはすべて同じ手順で使えます。最初に一度だけ確認してください。

手順操作
Excelを開き「開発」タブ→「Visual Basic」をクリック
左側のツリーでシート名を右クリック→「挿入」→「標準モジュール」
右側の白いエリアにコードをコピペ
「開発」タブ→「マクロ」→実行したいマクロ名を選択→「実行」
ファイルを保存するときは「.xlsm(マクロ有効ブック)」形式で保存
⚠️ 実行前に必ずバックアップを取ること

VBAを実行すると「元に戻す(Ctrl+Z)」が効きません。初めて使うときは必ずファイルのコピーを作ってから実行してください。

事務職のVBA自動化 具体例5選

ExcelのVBAエディタでコードを書いているイメージ

📷 Photo by Unsplash(商用利用可・無料)

1
未提出者・欠席者の自動抽出と別シートへの転記
難易度:低

名簿リストの中から「未提出」「欠席」などの条件に合う行だけを抽出して、別シートに自動でコピーするVBAです。出欠確認・提出物の未回収リスト作成・アンケートの未回答者抽出など、事務職が頻繁に行う作業に使えます。

❌ VBAなしの場合

フィルターで絞り込み→手動でコピー→別シートに貼り付け→フィルター解除という手順を毎回繰り返す。行数が多いと見落としが発生する。

✅ VBAありの場合

ボタン1つで「未提出」の行だけが別シートに自動転記される。何行あっても漏れがなく、毎回同じ品質で処理できる。
💻 VBAコード(コピペして使えます)
Sub ExtractNotSubmitted()
    ‘ 「Sheet1」のB列が「未提出」の行を「Sheet2」に転記する
    Dim wsData As Worksheet
    Dim wsResult As Worksheet
    Dim lastRow As Long
    Dim resultRow As Long
    Dim i As Long

    Set wsData = Sheets(“Sheet1”)  ‘ データが入っているシート名
    Set wsResult = Sheets(“Sheet2”‘ 転記先のシート名

    ‘ 転記先をクリア(ヘッダー行は残す)
    wsResult.Rows(“2:” & wsResult.Rows.Count).ClearContents

    lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row
    resultRow = 2 ‘ 転記先の開始行

    For i = 2 To lastRow
        If wsData.Cells(i, 2).Value = “未提出” Then ‘ B列が「未提出」なら
            wsData.Rows(i).Copy wsResult.Rows(resultRow)
            resultRow = resultRow + 1
        End If
    Next i

    MsgBox “転記完了:” & (resultRow2) & “件”
End Sub
💬 使い方のカスタマイズ"未提出"」の部分を「"欠席"」「"未回答"」などに変えれば、どんな条件にも対応できます。また列番号の「2」(B列)を「3」(C列)に変えれば、確認する列を変更できます。
2
今日の日付をファイル名に含めてPDF自動保存
難易度:低

毎月「書類名_202504.pdf」のようなファイル名でPDFを保存している方は多いはずです。このVBAは、実行した日付を自動でファイル名に入れてデスクトップにPDF保存します。マクロの記録ではできなかった「日付の自動入力」がVBAで解決します。

❌ VBAなしの場合

「名前を付けて保存」→ファイル名を手入力→保存場所を選択という手順を毎月繰り返す。ファイル名の入力ミス・保存先の間違いが発生しやすい。

✅ VBAありの場合

ボタン1つで「月次報告書_20250401.pdf」という形式でデスクトップに自動保存。ファイル名の入力ミスゼロ。
💻 VBAコード(コピペして使えます)
Sub SaveAsPDF()
    Dim fileName As String
    Dim savePath As String

    ‘ ファイル名を「書類名_YYYYMMDD.pdf」の形式で作成
    fileName = “月次報告書_” & Format(Date, “YYYYMMDD”) & “.pdf”

    ‘ 保存先:デスクトップ
    savePath = Environ(“USERPROFILE”) & “\Desktop\” & fileName

    ‘ アクティブシートをPDFとして保存
    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=savePath, _
        Quality:=xlQualityStandard

    MsgBox “PDFを保存しました:” & fileName
End Sub
💬 使い方のカスタマイズ"月次報告書_"」の部分を「"出欠確認表_"」「"請求書_"」などに変えれば、どんな書類にも使えます。保存先を変えたい場合はsavePathの行のパスを書き換えてください。
3
全シートのフォント・列幅を一括で統一する
難易度:低

複数の担当者が入力したExcelファイルは、シートごとにフォントや列幅がバラバラになりがちです。このVBAはブック内の全シートに対して、フォント・サイズ・列幅を一括で統一します。月次報告書の提出前や引き継ぎ資料の整理に役立ちます。

❌ VBAなしの場合

シートを1枚ずつ開いて全選択→フォント変更→列幅調整という作業をシート枚数分繰り返す。10枚以上あると数十分かかる。

✅ VBAありの場合

ボタン1つで全シートのフォントと列幅が一括統一。何十枚のシートでも30秒以内に完了。
💻 VBAコード(コピペして使えます)
Sub FormatAllSheets()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        With ws.Cells
            ‘ フォントを統一
            .Font.Name = “游ゴシック”
            .Font.Size = 11
        End With
        ‘ 列幅を自動調整
        ws.Cells.EntireColumn.AutoFit
    Next ws

    MsgBox “全シートの書式を統一しました”
End Sub
💬 使い方のカスタマイズ フォント名「"游ゴシック"」や文字サイズ「11」は職場のルールに合わせて変更してください。特定のシートだけスキップしたい場合は、If ws.Name = "表紙" Then GoTo Skipのような条件を追加できます。

コードを見ると「For Each」とか「If〜Then」が出てきましたが、意味がわからなくても使えますか?
コピペして使うだけなら意味がわからなくても大丈夫です。カスタマイズしたい部分(シート名・フォント名・条件の文字列)だけを日本語のコメント(緑色の部分)を手がかりに変えれば動きます。

4
全セルの余分なスペース・改行を一括削除する
難易度:低

他のシステムからコピペしたデータには、見えない全角スペース・半角スペース・改行コードが混入していることがあります。これが原因でVLOOKUPが一致しない・集計がずれるなどの謎エラーが発生します。このVBAは選択範囲内のスペースと改行を一括で削除します。

❌ VBAなしの場合

TRIM関数で1列ずつ処理→別列に貼り付け→元の列を削除という手順を繰り返す。全角スペースはTRIM関数でも取れないケースがある。

✅ VBAありの場合

範囲を選択してボタン1つで半角・全角スペース・改行コードをすべて削除。VLOOKUPの謎エラーが解消される。
💻 VBAコード(コピペして使えます)
Sub CleanSpaces()
    Dim cell As Range
    Dim targetRange As Range

    ‘ 選択範囲を対象にする
    Set targetRange = Selection

    For Each cell In targetRange
        If cell.Value <> “” Then
            Dim v As String
            v = cell.Value
            v = Application.Trim(v)             ‘ 先頭末尾の半角スペース削除
            v = Replace(v, “ ”, “”)           ‘ 全角スペース削除
            v = Replace(v, Chr(10), “”)        ‘ 改行コード(LF)削除
            v = Replace(v, Chr(13), “”)        ‘ 改行コード(CR)削除
            cell.Value = v
        End If
    Next cell

    MsgBox “スペース・改行の削除が完了しました”
End Sub
💬 使い方 処理したいセル範囲をドラッグで選択してからマクロを実行してください。TRIM関数では取れない全角スペース・改行コードもこのVBAで除去できます。
5
翌月の集計シートを自動で作成・初期化する
難易度:中

「先月のシートをコピーして、シート名を変えて、日付を書き換えて、データをクリアして…」という月末・月初の定型作業を自動化します。このVBAは現在のシートをコピーし、翌月の名前をつけて、指定したセルの日付を自動更新し、入力データをクリアします。

❌ VBAなしの場合

月末に毎回10〜15分かけてシートのコピー・リネーム・日付変更・データクリアを手作業で実施。「前月データの消し忘れ」というミスが発生しやすい。

✅ VBAありの場合

ボタン1つで翌月シートが完成。日付の自動更新・データクリアも同時に実行。消し忘れミスがゼロになる。
💻 VBAコード(コピペして使えます)
Sub CreateNextMonthSheet()
    Dim wsSource As Worksheet
    Dim wsNew As Worksheet
    Dim nextMonth As Date
    Dim newSheetName As String

    ‘ 現在アクティブなシートを元にする
    Set wsSource = ActiveSheet

    ‘ 翌月の日付を計算
    nextMonth = DateSerial(Year(Date), Month(Date) + 1, 1)
    newSheetName = Format(nextMonth, “YYYY年M月”)

    ‘ 同名シートが既にある場合はエラー回避
    On Error GoTo AlreadyExists

    ‘ シートをコピーして末尾に追加
    wsSource.Copy After:=Sheets(Sheets.Count)
    Set wsNew = ActiveSheet
    wsNew.Name = newSheetName

    ‘ A1セルの日付を翌月1日に更新(日付が入っている場合)
    wsNew.Range(“A1”).Value = nextMonth

    ‘ データ入力範囲をクリア(例:A3:Z100)
    wsNew.Range(“A3:Z100”).ClearContents

    MsgBox newSheetName & “のシートを作成しました”
    Exit Sub

AlreadyExists:
    MsgBox newSheetName & “のシートはすでに存在します”
End Sub
💬 使い方のカスタマイズ データをクリアする範囲「"A3:Z100"」は実際のシートに合わせて変更してください。日付を入れるセルが「A1」以外の場合はRange("A1")の部分を変えます。

⑤の翌月シート作成、まさに毎月やっていた作業です!これを使えば月末の作業が一気に楽になりそう。
学校事務で最も効果を実感したVBAのひとつです。4月・3月のような繁忙期に限って「前月データの消し忘れ」が起きていたんですが、このVBAにしてからゼロになりました。

VBAをさらに活用するための次のステップ

ExcelのVBAをさらに学んで業務効率化を進めるイメージ

📷 Photo by Unsplash(商用利用可・無料)

今回紹介したVBAに慣れてきたら、以下のステップでさらに活用の幅が広がります。

ステップ学ぶことできるようになること
Step 1(本記事)コピペして使う・カスタマイズする定型作業の自動化・条件分岐・ループ
Step 2変数・条件分岐・ループの基本を理解するコードを読んで意味がわかる・自分で修正できる
Step 3ユーザーフォームの作成入力フォームを作って誰でも使いやすいツールを作れる
Step 4他のOfficeアプリとの連携(Outlook・Word)メール自動送信・Word差し込み印刷の自動化

Step 2以降はChatGPTを活用すると学習が大幅に加速します。「このVBAコードに〇〇の処理を追加したい」「このエラーの原因を教えて」という形で聞くと、具体的なコードを生成・説明してくれます。

まとめ|事務職のVBA自動化は「コピペ→カスタマイズ」から始める

  • 未提出者・欠席者の自動抽出 ─ 条件に合う行を別シートに自動転記
  • 今日の日付つきPDF自動保存 ─ ファイル名入力ミスをゼロに
  • 全シートの書式一括統一 ─ フォント・列幅を何十枚でも30秒で統一
  • スペース・改行の一括削除 ─ VLOOKUPの謎エラーを根本解決
  • 翌月集計シートの自動生成 ─ 月末の定型作業をボタン1つに圧縮
💡 SE出身者からの一言
VBAは「完全に理解してから使う」必要はありません。コードの意味が全部わからなくても、コピペして動かしてみることが最初の一歩です。「動いた」という体験が理解を深める一番の近道です。まず1つ、自分の職場の「毎月繰り返している作業」に当てはめて試してみてください。
最後まで読んでいただきありがとうございました!
よかったらシェアしてね!
  • URLをコピーしました!