事務職の日常って、意外と「単純だけど時間がかかる」作業で埋め尽くされていませんか?
Excelで顧客リストの重複をコツコツ手で消したり、同じような文面のメールを何十件も1件ずつ送ったり——「これ、もっと楽にならないのかな…」と思いながらも、なんとなく手作業を続けているという方も多いと思います。
実は、私もそのひとりでした。事務作業の中でも特に「重複データの削除」と「メール送信」は毎週発生する定番の手間で、時間を食われるたびにうんざりしていました。
今回は、ChatGPT×VBAを使ってこの2つの作業を自動化した体験談をご紹介します。プログラミングの知識がほぼゼロでも、ChatGPTに相談しながらコードを作れたので、「VBAって難しそう…」と思っている事務職の方にもぜひ読んでほしい内容です。
直面した課題について
私が担当している業務のひとつに、複数の部署から集まった顧客データを1つのExcelにまとめる作業があります。各部署が別々に入力しているため、同じ顧客が2〜3件ダブって登録されていることがざらにありました。
手作業での重複削除の流れはこんな感じです。
- Excelの「データ」タブ → 「重複の削除」を開く
- どの列で重複を判定するかを選ぶ
- 削除後、念のため目視で確認する
1回やるだけなら5〜10分ですが、週に3〜4回繰り返すとそれだけで30分以上が消えていきます。しかも「削除した件数の記録」を忘れがちで、後から確認が発生することも…。
もう一つの悩みが、取引先へのお知らせメールです。月末になると30〜50社に向けて、宛名と金額だけ違う「ほぼ同じ文面」のメールを送る必要があります。
Outlookで1件ずつ宛名を変えながら送信——これが本当に苦痛で、毎回「コピペのミスで間違った宛名のまま送ってしまわないか」とヒヤヒヤしていました。
やったこと
VBAのことはほとんど知りませんでしたが、「ChatGPTに聞けばコードを書いてくれる」と聞いて、まず重複削除の自動化から試してみました。
最初に投げた質問はこんな感じです。
- 「ExcelのA列にメールアドレスが入っています。重複している行を削除して、何件削除したかをメッセージボックスで表示するVBAコードを作ってください。」
すると、あっという間にコードが返ってきました。最初は「本当に動くの?」と半信半疑でしたが、実際にExcelのVBAエディタに貼り付けて実行したら、ちゃんと動いたんです。これには素直に驚きました。
ChatGPTへデータを渡す際は、個人情報・企業情報は書き換えてください。
ただ、最初のコードには少し問題がありました。削除の処理が「上から順番に」行われていたため、先に登録されたデータが残り、後から登録された(より新しい)データが消えてしまうことがあったんです。
「新しいほうを残したい」とChatGPTに伝えると、すぐに修正版を出してくれました。このやり取りを2〜3回繰り返すうちに、自分の業務にぴったりなコードが完成しました。
自動化できるようになった
以下は、A列のメールアドレスをキーに重複を削除し、削除件数を表示するVBAコードです。ChatGPTと相談しながら仕上げたものがベースになっています。
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`も同一と判定されます。
次はメール送信の自動化です。Excelのシートに「会社名・担当者名・メールアドレス・金額」を一覧で用意しておき、1クリックで全件送信できるようにしました。
| A列:会社名 | B列:担当者名 | C列:メールアドレス | D列:金額 |
| 〇〇株式会社 | 山田 太郎 | yamada@xxx.com | 50,000 |
| △△商事 | 鈴木 花子 | suzuki@xxx.com | 32,000 |
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分に。宛名ミスも完全になくなりました。
事務職の仕事は「繰り返し作業」が多い反面、毎回の手順が決まっているので自動化と相性がとても良いです。ChatGPTがあれば、プログラミング経験がなくてもゼロから自動化に踏み出せます。
まとめ
ChatGPT を使って業務を自動化させることで、以下のメリットが得られました。
- 今回のエクセル業務はVBAで自動化することで大幅な時間短縮が可能
- VBAのコードはChatGPTに状況を説明するだけで作ってもらえる
- コードが動かないときは、エラーメッセージをそのままChatGPTに貼るとすぐ修正してもらえる
- テストをして内容を確認する
- 企業、個人情報をダミーデータに書き換えてからChatGPTに渡す
「VBAは難しそう」と思っていた方も、ChatGPTというパートナーがいれば大丈夫です。ぜひ、あなたの「めんどくさい作業」を一つ選んで、自動化に挑戦してみてください。