事務職の「めんどくさい」をChatGPT×VBAで解決!重複削除・メール送信を自動化した話

事務職の日常って、意外と「単純だけど時間がかかる」作業で埋め尽くされていませんか?

Excelで顧客リストの重複をコツコツ手で消したり、同じような文面のメールを何十件も1件ずつ送ったり——「これ、もっと楽にならないのかな…」と思いながらも、なんとなく手作業を続けているという方も多いと思います。

実は、私もそのひとりでした。事務作業の中でも特に「重複データの削除」と「メール送信」は毎週発生する定番の手間で、時間を食われるたびにうんざりしていました。

今回は、ChatGPT×VBAを使ってこの2つの作業を自動化した体験談をご紹介します。プログラミングの知識がほぼゼロでも、ChatGPTに相談しながらコードを作れたので、「VBAって難しそう…」と思っている事務職の方にもぜひ読んでほしい内容です。

直面した課題について

Excelのルーチンワーク

私が担当している業務のひとつに、複数の部署から集まった顧客データを1つのExcelにまとめる作業があります。各部署が別々に入力しているため、同じ顧客が2〜3件ダブって登録されていることがざらにありました。

手作業での重複削除の流れはこんな感じです。

  • Excelの「データ」タブ → 「重複の削除」を開く
  • どの列で重複を判定するかを選ぶ
  • 削除後、念のため目視で確認する

1回やるだけなら5〜10分ですが、週に3〜4回繰り返すとそれだけで30分以上が消えていきます。しかも「削除した件数の記録」を忘れがちで、後から確認が発生することも…。

「ほぼ同じ文面」のメールを何十件も手で送る非効率

もう一つの悩みが、取引先へのお知らせメールです。月末になると30〜50社に向けて、宛名と金額だけ違う「ほぼ同じ文面」のメールを送る必要があります。

Outlookで1件ずつ宛名を変えながら送信——これが本当に苦痛で、毎回「コピペのミスで間違った宛名のまま送ってしまわないか」とヒヤヒヤしていました。

やったこと

ChatGPTへの相談

VBAのことはほとんど知りませんでしたが、「ChatGPTに聞けばコードを書いてくれる」と聞いて、まず重複削除の自動化から試してみました。

最初に投げた質問はこんな感じです。

  • 「ExcelのA列にメールアドレスが入っています。重複している行を削除して、何件削除したかをメッセージボックスで表示するVBAコードを作ってください。」

すると、あっという間にコードが返ってきました。最初は「本当に動くの?」と半信半疑でしたが、実際にExcelのVBAエディタに貼り付けて実行したら、ちゃんと動いたんです。これには素直に驚きました。

ChatGPTへデータを渡す際は、個人情報・企業情報は書き換えてください。

うまくいかなかったこと

ただ、最初のコードには少し問題がありました。削除の処理が「上から順番に」行われていたため、先に登録されたデータが残り、後から登録された(より新しい)データが消えてしまうことがあったんです。

「新しいほうを残したい」とChatGPTに伝えると、すぐに修正版を出してくれました。このやり取りを2〜3回繰り返すうちに、自分の業務にぴったりなコードが完成しました。

自動化できるようになった

重複削除マクロ

以下は、A列のメールアドレスをキーに重複を削除し、削除件数を表示するVBAコードです。ChatGPTと相談しながら仕上げたものがベースになっています。

VBA
Sub 重複削除()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim deleteCount As Long
    Dim dict As Object

    Set ws = ThisWorkbook.Sheets("顧客リスト")  ' シート名を変更してください
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    deleteCount = 0

    ' Dictionaryオブジェクトで重複チェック(下から処理して新しいデータを優先)
    Set dict = CreateObject("Scripting.Dictionary")

    For i = lastRow To 2 Step -1
        Dim key As String
        key = LCase(Trim(ws.Cells(i, 1).Value))

        If key = "" Then
            GoTo NextRow
        End If

        If dict.exists(key) Then
            ws.Rows(i).Delete
            deleteCount = deleteCount + 1
        Else
            dict.Add key, True
        End If

NextRow:
    Next i

    MsgBox deleteCount & " 件の重複データを削除しました。", vbInformation, "完了"
End Sub

下から処理することで、リストの下側(新しく追加されたデータ)が優先的に残る仕組みになっています。`LCase`で大文字・小文字を統一しているので、`Abc@example.com`と`abc@example.com`も同一と判定されます。

メール一括送信マクロ(Outlook連携)

次はメール送信の自動化です。Excelのシートに「会社名・担当者名・メールアドレス・金額」を一覧で用意しておき、1クリックで全件送信できるようにしました。

A列:会社名B列:担当者名C列:メールアドレスD列:金額
〇〇株式会社山田 太郎yamada@xxx.com50,000
△△商事鈴木 花子suzuki@xxx.com32,000
VBA
Sub メール一括送信()
    Dim ws As Worksheet
    Dim outlookApp As Object
    Dim mail As Object
    Dim lastRow As Long
    Dim i As Long
    Dim companyName As String
    Dim personName As String
    Dim mailAddress As String
    Dim amount As String

    Set ws = ThisWorkbook.Sheets("送信リスト")  ' シート名を変更してください
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' 送信前に確認
    Dim result As Integer
    result = MsgBox(lastRow - 1 & " 件のメールを送信しますか?", vbYesNo + vbQuestion, "送信確認")
    If result = vbNo Then Exit Sub

    Set outlookApp = CreateObject("Outlook.Application")

    For i = 2 To lastRow
        companyName = ws.Cells(i, 1).Value
        personName  = ws.Cells(i, 2).Value
        mailAddress = ws.Cells(i, 3).Value
        amount      = Format(ws.Cells(i, 4).Value, "#,##0")

        Set mail = outlookApp.CreateItem(0)
        With mail
            .To = mailAddress
            .Subject = "【ご請求】" & Month(Now) & "月分のご請求金額についてのご連絡"
            .Body = personName & " 様" & vbCrLf & vbCrLf & _
                    "いつも大変お世話になっております。" & vbCrLf & _
                    companyName & " の担当、暮らしラボ事務局です。" & vbCrLf & vbCrLf & _
                    "今月分のご請求金額をお知らせいたします。" & vbCrLf & _
                    "------------------------------" & vbCrLf & _
                    " ご請求金額:" & amount & " 円(税込)" & vbCrLf & _
                    "------------------------------" & vbCrLf & vbCrLf & _
                    "ご不明な点がございましたら、お気軽にご連絡ください。" & vbCrLf & _
                    "どうぞよろしくお願いいたします。"
            .Send  ' 即送信。確認してから送りたい場合は .Display に変更
        End With

        Set mail = Nothing
    Next i

    MsgBox lastRow - 1 & " 件のメールを送信しました。", vbInformation, "完了"
    Set outlookApp = Nothing
End Sub

.Sendを.Displayに変えると、送信前にOutlookの画面で内容を確認できます。最初は必ず.Displayでテストしてから本番運用することをおすすめします。

ChatGPTへの質問で意識したこと

意識した内容
  • 状況を具体的に伝える:「A列にメールアドレス、B列に名前」など列の構成を伝える
  • エラーメッセージをそのまま貼る:動かないときはエラー文をコピペして「これが出ました」と伝える
  • 「~したい」より「~になってほしい」:結果のイメージを伝える

自動化して変わったこと

自動化後の業務時間
  • 重複削除:毎週30分 → 約1分に短縮。削除件数の記録も自動でメッセージ表示されるので報告ミスがゼロになりました。
  • メール送信:50件送るのに約40分かかっていたのが → 約3分に。宛名ミスも完全になくなりました。

Excelを使った事務職こそChatGPT(AI)を使ったほうがよい

事務職の仕事は「繰り返し作業」が多い反面、毎回の手順が決まっているので自動化と相性がとても良いです。ChatGPTがあれば、プログラミング経験がなくてもゼロから自動化に踏み出せます。

まとめ

ChatGPT を使って業務を自動化させることで、以下のメリットが得られました。

  • 今回のエクセル業務はVBAで自動化することで大幅な時間短縮が可能
  • VBAのコードはChatGPTに状況を説明するだけで作ってもらえる
  • コードが動かないときは、エラーメッセージをそのままChatGPTに貼るとすぐ修正してもらえる
  • テストをして内容を確認する
  • 企業、個人情報をダミーデータに書き換えてからChatGPTに渡す

「VBAは難しそう」と思っていた方も、ChatGPTというパートナーがいれば大丈夫です。ぜひ、あなたの「めんどくさい作業」を一つ選んで、自動化に挑戦してみてください。