エクセルで期限通知メールを自動送信する方法|VBAコード全文コピペOK
「エクセルで管理している契約更新日や支払期限を、担当者に自動でメール通知できないだろうか」
「VBAでメール送信ができるらしいけど、具体的な手順がわからない」
「ネットで見つけたコードをコピペしたのに動かなくて困っている」
——このような悩みを抱えていませんか。
期限管理の自動化は、多くの総務・経理担当者が抱える課題ですよね。一度仕組みを作れば、毎日の確認作業から解放されます。
期限管理の通知を手作業で行っていると、繁忙期に連絡が漏れたり、担当者の不在時にフォローができなかったりと、思わぬトラブルにつながるリスクがあります。
契約更新の失念による自動解約や、支払遅延による信用低下など、一度のミスが大きな損失を招くケースも少なくありません。
本記事では、エクセルとOutlookを連携させて期限通知メールを自動送信する方法を、初心者の方でも迷わないよう完全手順で解説します。
コピペで動作するVBAコード全文はもちろん、期限管理シートの作成方法、動かないときのトラブルシューティング、さらにはPower AutomateやGoogleスプレッドシートを使った代替手段との比較まで網羅しています。
この記事を読めば、今日中にエクセルで期限通知メールの自動送信システムを構築し、期限切れによるトラブルを未然に防ぐ仕組みを手に入れることができます。
目次
エクセルで期限通知メールを自動送信する3つの方法
エクセルで管理している契約更新日や支払期限、タスクの締切が近づいたとき、担当者に自動でメールを送信できれば、期限切れによるトラブルを未然に防ぐことができます。
しかし、「期限通知メールを自動化したい」と思っても、実現方法は一つではありません。
代表的な手段として、VBAによるOutlook連携、Power Automateによるノーコード実装、そしてスプレッドシートとGAS(Google Apps Script)の組み合わせという3つの選択肢が存在します。
どの方法が自分に合っているか迷う方も多いですよね。環境や技術レベルによって最適な選択肢は変わります!
どの方法を選ぶべきかは、利用している環境や技術レベル、運用体制によって大きく異なります。
たとえば、会社でMicrosoft 365を契約しておりOutlookを標準メールクライアントとして使用しているなら、VBAやPower Automateが有力な候補となります。
一方で、Gmailを中心とした業務フローを採用している場合や、Macユーザーの場合は、Googleスプレッドシート×GASの組み合わせが現実的な選択肢となるでしょう。
本章では、これら3つの方法について、それぞれの特徴と向き不向きを整理します。
自分の業務環境や技術スキルに照らし合わせながら、最適な方法を見極めてください。
方法①VBA×Outlook連携で完全自動化(本記事で詳しく解説)
VBA(Visual Basic for Applications)とは、Microsoft Office製品に標準搭載されているプログラミング言語です。
エクセルの操作を自動化できるだけでなく、同じMicrosoft製品であるOutlookと連携させることで、期限が近づいた案件の担当者に自動でメールを送信する仕組みを構築できます。
- 追加コストがかからない
- Excel単体で完結できる
- タスクスケジューラとの組み合わせで完全自動化が可能
この方法の最大の利点は、追加コストがかからないことと、エクセル単体で完結できることにあります。
Windows環境でOutlookをインストールしている企業であれば、新たにツールを導入する必要はありません。
また、一度VBAコードを作成してしまえば、エクセルファイルを開いてマクロを実行するだけで通知メールが送信されます。
さらに、Windowsのタスクスケジューラと組み合わせれば、毎朝決まった時刻に自動でマクロを実行し、担当者に通知を送る完全自動化も実現可能です。
VBAは難しそうに感じますが、コードのコピペと少しの修正だけで動かせるので、プログラミング初心者でも大丈夫ですよ!
📝 VBAを選ぶべき人の条件
Windows PCを使用しており、Outlookが業務用メールクライアントとして設定されていること。
コードをコピペして少し修正する程度のスキルがあること。
今すぐ無料で期限通知の仕組みを作りたいと考えていること。
これらの条件を満たしているなら、VBAによる実装が最も手軽で確実な方法といえます。
こうしたデメリットを理解したうえで、自社の環境に合致するかどうかを判断してください。
本記事では、このVBA×Outlook連携による方法を詳しく解説していきます。
方法②Power Automateでノーコード実装
Power Automateは、Microsoft 365に含まれるワークフロー自動化ツールです。
ノーコード、つまりプログラミングの知識がなくても、マウス操作とテキスト入力だけで自動化フローを作成できる点が大きな特徴です。
エクセルファイルをOneDriveやSharePointに保存しておけば、Power Automateからそのファイルを参照し、期限日を条件にしてメールを自動送信するフローを構築できます。
- コードを一切書かずに期限通知を実現できる
- クラウドベースで特定のPCに依存しない
- 作成者が異動・退職してもフローは動き続ける
この方法のメリットは、コードを一切書かずに期限通知を実現できることにあります。
VBAに苦手意識がある方や、プログラミング経験がまったくない方でも、テンプレートを活用すれば比較的短時間でフローを完成させられます。
また、クラウドベースで動作するため、特定のPCに依存せず、設定したスケジュールに従って自動実行される点も魅力です。
作成者が退職や異動をしても、フローはそのまま動き続けます。
「VBAの属人化」が心配な方には、Power Automateが安心ですね。チームでの運用にも向いています。
また、エクセルファイルをローカルPCではなくOneDriveやSharePoint上に保存しておく必要があるため、現在の運用フローを変更しなければならない場合もあります。
さらに、フローの設計には慣れが必要で、初めて触る場合は設定画面の理解に時間がかかることもあるでしょう。
📝 Power Automateを選ぶべき人
すでにMicrosoft 365を契約しており、ファイルをクラウド上で管理している企業や部署の担当者。
VBAの属人化リスクを避けたい場合や、複数人で運用するワークフローを構築したい場合にも適しています。
方法③スプレッドシート×GASの組み合わせ
GAS(Google Apps Script)は、Googleが提供するクラウドベースのスクリプト言語です。
スプレッドシートと組み合わせることで、期限管理表のデータを参照し、条件に合致した行の担当者にGmail経由でメールを自動送信する仕組みを構築できます。
- 完全に無料で利用できる
- Googleアカウントさえあれば誰でも始められる
- Mac環境でも問題なく動作する
この方法の最大の利点は、完全に無料で利用できることと、Googleアカウントさえあれば誰でも始められることにあります。
Outlookを使用していない企業や、Macユーザー、あるいは個人で期限管理を自動化したい場合に特に有効な選択肢です。
また、GASはJavaScriptをベースにした言語であるため、VBAとは異なるプログラミング経験を持つ方には馴染みやすいかもしれません。
Web系のプログラミング経験がある方なら、GASはVBAより取っつきやすいはずです!
クラウド上で動作するため、特定のPCを起動していなくてもスケジュール実行が可能です。
スプレッドシートの「トリガー」機能を使えば、毎日決まった時刻にスクリプトを自動実行する設定も簡単に行えます。
この点はPower Automateと似た利便性を持っています。
大量の通知を送る必要がある場合は、この制限に注意が必要です。
📝 スプレッドシート×GASを選ぶべき人
Gmailを業務で利用している方、Outlookを導入していない環境の方。
Mac環境で期限通知を自動化したい方、無料でクラウドベースの自動化を実現したい方。
スプレッドシートで期限管理を行っているなら、GASによる自動化は非常に親和性の高い選択肢となるでしょう。
ここまで3つの方法を紹介しました。次からは、最も導入しやすいVBA×Outlook連携の実装手順を詳しく解説していきます!
ここまで3つの方法を紹介しましたが、本記事ではWindowsとOutlookを使用する企業で最も導入しやすいVBA×Outlook連携による方法を詳しく解説していきます。
コードのコピペと数箇所の修正だけで動作する実装手順を、初心者の方でも迷わないようステップバイステップで説明しますので、ぜひ最後までお読みください。
【事前準備】エクセルで期限管理シートを作成する
VBAコードを書き始める前に、まず期限管理シートの構成を整えておくことが重要です。
どれほど優れたコードを用意しても、データの入力形式や列の配置が正しくなければ、VBAは期待通りに動作しません。
逆に言えば、シートの構成さえ正しく整えておけば、後はコードをコピペして数箇所を修正するだけで期限通知メールの自動化が完成します。
準備をしっかりしておけば、後の作業がグッと楽になりますよ!
本章では、VBAで期限通知メールを送信するために必要なシート構成と、あわせて設定しておくと便利な条件付き書式について解説します。
この事前準備をしっかり行うことで、後工程でのつまずきを防ぎ、スムーズに実装を進められるようになります。
必須項目:タスク名・期限日・メールアドレス・通知済フラグ
VBAで期限通知メールを自動送信するためには、最低限4つの項目をシートに用意する必要があります。
それぞれの項目がどのような役割を果たすのかを理解したうえで、シートを構成していきましょう。
- タスク名(A列)
- 期限日(B列)
- メールアドレス(C列)
- 通知済フラグ(D列)
📝 1つ目:タスク名(A列)
契約書の名称、支払い案件名、プロジェクト名など、何についての期限なのかを示す項目です。
メール本文に含めることで、受信者がどの案件について通知を受けたのかを一目で把握できるようになります。
📝 2つ目:期限日(B列)
契約更新日、支払期日、タスクの締切日など、通知を送るべき基準となる日付を入力します。
VBAではこの期限日と本日の日付を比較し、設定した日数以内であればメールを送信するという処理を行います。
📝 3つ目:メールアドレス(C列)
期限が近づいたときに通知を送る宛先のメールアドレスを入力します。
担当者のメールアドレスを直接入力する方法が一般的です。
複数の担当者に同時に通知したい場合は、セル内にカンマ区切りで複数のメールアドレスを入力するか、CC用の列を別途設けるといった工夫も可能です。
📝 4つ目:通知済フラグ(D列)
同じ案件に対して何度もメールが送信されることを防ぐために使用します。
VBAの処理でメールを送信した後に「済」などの文字列を自動で書き込むようにします。
これにより、翌日以降にマクロを実行しても、すでに通知済みの案件には再度メールが送信されなくなります。
通知済フラグがないと、毎回同じ人にメールが飛んでしまいます。忘れずに設定しましょう!
具体的なシート構成例を示します。
1行目をヘッダー行として、A1セルに「タスク名」、B1セルに「期限日」、C1セルに「メールアドレス」、D1セルに「通知済」と入力します。
2行目以降にデータを入力していきます。
| タスク名 | 期限日 | メールアドレス | 通知済 |
|---|---|---|---|
| 株式会社○○様 業務委託契約更新 | 2025/2/15 | tanaka@example.com | (空欄) |
| △△プロジェクト 納品期限 | 2025/2/20 | yamada@example.com | (空欄) |
シート名についても確認しておきましょう。
VBAコードでは対象となるシートを名前で指定します。
本記事のサンプルコードでは「期限管理」というシート名を使用しますので、シート見出しの部分を右クリックして「名前の変更」を選び、「期限管理」と入力しておいてください。
シート名を別の名称にしたい場合は、後述するVBAコード内のシート名指定箇所を変更すれば対応できます。
期限が近づくとセルの色が自動で変わる条件付き書式の設定
VBAによるメール通知は非常に便利ですが、日々の業務の中でエクセルファイルを開いたときに、期限が迫っている案件を視覚的に把握できると、さらに管理がしやすくなります。
条件付き書式を使えば、期限が近い案件のセルを自動的に色付けすることができます。
メール通知と視覚的なアラートを組み合わせることで、期限管理の精度を一層高められるでしょう。
- 期限日まで7日以内 → 黄色
- 期限日を過ぎた → 赤色
色分けしておくと、ファイルを開いた瞬間に「急ぎの案件」がすぐわかりますね!
B2セルからB列の最終行まで(たとえばB2からB100まで)をドラッグして選択してください。
選択範囲は実際にデータが入る可能性のある行までを目安に設定します。
エクセルのリボンメニューから「ホーム」タブを選択し、「条件付き書式」をクリックします。
表示されるメニューから「新しいルール」を選択してください。
「新しい書式ルール」ダイアログボックスが表示されたら、ルールの種類として「数式を使用して、書式設定するセルを決定」を選択します。
ここで入力する数式によって、どの条件でセルに色を付けるかを指定します。
「次の数式を満たす場合に値を書式設定」の入力欄に、次の数式を入力してください。
=AND(B2<>””,B2
この数式は、B2セルが空欄ではなく、かつB2セルの日付が今日より前(過去)である場合にTRUEを返します。
数式を入力したら「書式」ボタンをクリックし、「塗りつぶし」タブで赤色を選択して「OK」をクリックします。
再度「条件付き書式」から「新しいルール」を選択し、同様の手順で次の数式を入力します。
=AND(B2<>””,B2>=TODAY(),B2<=TODAY()+7)
この数式は、B2セルが空欄ではなく、B2セルの日付が今日以降、かつ今日から7日以内である場合にTRUEを返します。
書式設定で黄色を選択して「OK」をクリックしてください。
ルールの優先順位を確認・変更するには、「条件付き書式」メニューから「ルールの管理」を選択します。
表示されるダイアログボックスで、ルールの順番を上下の矢印ボタンで入れ替えることができます。
これで条件付き書式の設定は完了です。
期限日の列を見れば、赤色のセルは期限超過、黄色のセルは期限間近であることが一目でわかるようになりました。
この視覚的なアラートとVBAによるメール通知を組み合わせることで、期限管理の抜け漏れを大幅に減らすことができます。
行全体に色を付けたい場合は、応用設定もできますよ!
📝 応用:行全体に色を付ける方法
期限日だけでなく行全体に色を付けたい場合は、選択範囲をA2からD100までに拡大します。
数式の列参照を$B2のように列を固定する絶対参照に変更してください。
たとえば「=$B2<TODAY()」のように記述すれば、B列の期限日を基準にしながら、A列からD列までの行全体に色が適用されます。
【実装手順】期限通知メールをVBAで自動送信する方法
事前準備として期限管理シートの構成が整ったら、いよいよVBAコードの実装に入ります。
VBAと聞くと難しそうに感じるかもしれませんが、実際の作業はエディタを開いてコードを貼り付け、数箇所を自分の環境に合わせて修正するだけです。
プログラミング未経験の方でも、手順通りに進めれば30分程度で期限通知メールの自動送信を実現できます。
「上司から今日中に作って」と言われた方も安心してください。この手順どおりに進めれば大丈夫です!
本章では、VBAの編集画面であるVBE(Visual Basic Editor)の開き方から、コードの貼り付け、保存形式の選択、そしてテスト実行までを、初心者の方でも迷わないようステップバイステップで解説します。
各ステップで起こりやすいつまずきポイントとその対処法もあわせて説明しますので、順番に進めていきましょう。
ステップ1|VBE(Visual Basic Editor)を開く
VBAコードを記述するためには、まずVBE(Visual Basic Editor)と呼ばれる専用の編集画面を開く必要があります。
VBEはエクセルに標準搭載されている機能であり、特別なソフトウェアをインストールする必要はありません。
📝 VBEを開く方法
VBEを開く最も簡単な方法は、キーボードショートカットを使うことです。
エクセルで期限管理シートを開いた状態で、キーボードの「Alt」キーを押しながら「F11」キーを押してください。
これでVBEの画面が別ウィンドウで立ち上がります。
キーボードショートカットがうまく動作しない場合は、リボンメニューから開くこともできます。
「開発」タブをクリックし、「Visual Basic」ボタンをクリックしてください。
これでVBEが起動します。
リボンメニューの「ファイル」をクリックし、「オプション」を選択します。
表示されるダイアログボックスの左側メニューから「リボンのユーザー設定」をクリックします。
右側の「メイン タブ」一覧の中にある「開発」にチェックを入れて「OK」をクリックしてください。
これで開発タブがリボンメニューに表示されるようになります!
VBEが起動したら、画面の構成を確認しましょう。
左側に「プロジェクト エクスプローラー」というウィンドウがあり、現在開いているブック名とその中のシートが一覧で表示されています。
もしプロジェクト エクスプローラーが表示されていない場合は、VBEのメニューバーから「表示」をクリックし、「プロジェクト エクスプローラー」を選択すれば表示されます。
次に、コードを記述するための「標準モジュール」を挿入します。
プロジェクト エクスプローラーで、現在作業中のブック名(たとえば「VBAProject (期限管理.xlsm)」)を右クリックします。
表示されるメニューから「挿入」にカーソルを合わせ、「標準モジュール」をクリックしてください。
これにより、プロジェクト エクスプローラーの「標準モジュール」フォルダの下に「Module1」が作成され、右側に白い編集画面(コードウィンドウ)が表示されます。
この白い画面がVBAコードを記述する場所です。
ここまでの手順が完了すれば、コードを貼り付ける準備は整いました。
ステップ2|期限通知メール送信コードを貼り付ける(3箇所修正)
VBEの準備ができたら、次は期限通知メールを送信するVBAコードを貼り付けます。
コード全文は本記事の後半で詳しく解説しますが、ここでは貼り付け後に修正すべき3箇所について先に説明しておきます。
Module1のコードウィンドウに、本記事で紹介するVBAコード全文をコピーして貼り付けてください。
貼り付けは通常の操作と同様に、Ctrl+Vで行えます。
コードを貼り付けたら、以下の3箇所を自分の環境に合わせて修正しましょう!
- シート名:「Worksheets(“期限管理”)」の部分
- 通知日数:期限の何日前に通知するか(初期値:7日前)
- メール件名:「【期限通知】」の部分
1つ目の修正箇所は「シート名」です。
サンプルコードでは「期限管理」というシート名を指定しています。
前章で説明したとおり、シート名を「期限管理」に設定している場合は修正不要です。
別のシート名を使用している場合は、コード内の「期限管理」の部分を実際のシート名に書き換えてください。
コード内では「Worksheets(“期限管理”)」のように記述されている箇所が該当します。
2つ目の修正箇所は「通知日数」です。
サンプルコードでは、期限日の7日前に通知メールを送信するように設定しています。
この日数を変更したい場合は、コード内の「7」という数字を希望の日数に書き換えてください。
たとえば、3日前に通知したい場合は「3」に、14日前に通知したい場合は「14」に変更します。
コード内では「If 期限日 – Date <= 7 And 期限日 – Date >= 0 Then」のように記述されている箇所が該当します。
3つ目の修正箇所は「メール件名」です。
サンプルコードでは「【期限通知】」という件名を設定していますが、自社の業務に合わせて変更することをおすすめします。
たとえば「【契約更新のお知らせ】」や「【支払期限のご連絡】」など、受信者がメールの内容を把握しやすい件名に変更してください。
コード内では「.Subject = “【期限通知】” & タスク名」のように記述されている箇所が該当します。
これら3箇所を修正すれば、コードのカスタマイズは完了です!メール本文の調整は動作確認後でOKですよ。
VBEのメニューバーから「デバッグ」をクリックし、「VBAProjectのコンパイル」を選択します。
エラーがなければ何も表示されずに処理が完了します。
もしエラーがある場合は、該当箇所がハイライトされてエラーメッセージが表示されますので、修正箇所を確認してください。
| よくあるエラー | 原因と対処法 |
|---|---|
| 構文エラー | ダブルクォーテーションが全角になっている → 半角に修正 |
| コンパイルエラー | 修正時に括弧を誤って削除してしまった → 括弧を追加 |
ステップ3|マクロ有効ブック(.xlsm)として保存
VBAコードを記述したエクセルファイルは、通常の形式(.xlsx)では保存できません。
通常のエクセルブック形式(.xlsx)で保存しようとすると、マクロが含まれていることを示す警告メッセージが表示され、そのまま保存するとVBAコードが削除されてしまいます。
せっかく記述したコードを失わないために、必ず「マクロ有効ブック(.xlsm)」形式で保存してください。
これ、初心者の方がよくつまずくポイントです。保存形式に注意しましょう!
VBEウィンドウの右上にある×ボタンをクリックしてVBEを閉じるか、Alt+F11を再度押すとエクセルの画面に切り替わります。
エクセルの画面で「ファイル」タブをクリックし、「名前を付けて保存」を選択します。
保存場所を指定したら、ファイル名の下にある「ファイルの種類」のドロップダウンリストをクリックしてください。
一覧の中から「Excel マクロ有効ブック (*.xlsm)」を選択します。
ファイル名を入力し、「保存」ボタンをクリックすれば保存完了です。
ファイル名は「期限管理_通知システム.xlsm」など、マクロが含まれていることがわかりやすい名前にしておくと、後から管理しやすくなります。
保存が完了したら、念のためファイルを一度閉じて再度開き、VBAコードが保持されていることを確認しましょう。
Alt+F11でVBEを開き、Module1にコードが残っていれば正常に保存されています。
📝 セキュリティ警告について
ファイルを開いた際に「セキュリティの警告 マクロが無効にされました。」というメッセージバーが画面上部に表示される場合があります。
これはエクセルのセキュリティ機能によるもので、「コンテンツの有効化」ボタンをクリックすればマクロが有効になります。
このセキュリティ設定については、トラブルシューティングの章で詳しく解説します。
ステップ4|テスト実行で動作確認
コードの貼り付けと保存が完了したら、本番運用の前に必ずテスト実行を行いましょう。
テスト実行では、実際にメールが送信されることを確認するとともに、意図しない宛先にメールが飛んでしまうリスクを避けるため、自分自身のメールアドレス宛にテスト送信を行います。
- A2セル:「テスト案件」
- B2セル:本日から7日以内の日付(たとえば明日の日付)
- C2セル:自分自身のメールアドレス
- D2セル:空欄のまま
これにより、マクロを実行するとテスト用の案件が通知対象となり、自分宛にメールが送信されます。
Outlookを起動し、メールの送受信ができる状態にしておいてください。
準備ができたら、いよいよマクロを実行してみましょう!
エクセルのリボンメニューから「開発」タブをクリックし、「マクロ」ボタンをクリックします。
マクロダイアログボックスが表示され、登録されているマクロの一覧が表示されます。
「期限通知メール送信」を選択して「実行」ボタンをクリックしてください。
📝 VBEから直接実行する方法
Alt+F11でVBEを開き、Module1のコード内にカーソルを置いた状態で、キーボードのF5キーを押すか、ツールバーの再生ボタン(緑色の三角形)をクリックします。
マクロが正常に実行されると、Outlookから自分宛にテストメールが送信されます。
Outlookの受信トレイを確認し、期限通知メールが届いていることを確認してください。
メールの件名、本文、宛先が意図したとおりになっていれば、テスト成功です。
- Outlookの受信トレイ:期限通知メールが届いている
- D2セル:「済」と自動で入力されている
D2セル(通知済フラグの列)に「済」と自動で入力されていれば、コードが正しく動作しています。
このフラグにより、翌日以降にマクロを実行しても、すでに通知済みの案件には再度メールが送信されなくなります。
テストが成功したら、テスト用データを削除して、実際の案件データを入力して本番運用を開始しましょう!
もしテストでメールが届かない、エラーメッセージが表示されるなどの問題が発生した場合は、本記事の後半で解説するトラブルシューティングを参照してください。
【コピペOK】エクセルの期限通知メールVBAコード全文
ここまでの手順でVBEの準備と操作方法を理解できたところで、いよいよ本題となるVBAコードを紹介します。
本章では、期限日の7日前に自動で通知メールを送信するサンプルコードの全文を掲載し、その後にコード各部の解説を行います。
「まずは動くコードが欲しい!」という方は、最初のサンプルコードをコピペして試してみてくださいね。
「まずは動くコードが欲しい」「細かい説明は後でいいから、とにかくコピペして試したい」という方は、最初のサンプルコードをそのままModule1に貼り付け、前章で説明した3箇所(シート名・通知日数・メール件名)だけを修正してテスト実行してください。
コードの意味を理解してカスタマイズしたい方は、その後の解説を読み進めていただければ、通知日数の変更やメール文面の調整など、自分仕様への応用が可能になります。
7日前に自動通知するサンプルコード(約40行)
以下が、期限日の7日前に通知メールを自動送信するVBAコードの全文です。
このコードをそのままコピーして、VBEのModule1に貼り付けてください。
約40行のシンプルなコードなので、初心者の方でも扱いやすいですよ!
Sub 期限通知メール送信()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim タスク名 As String
Dim 期限日 As Date
Dim メールアドレス As String
Dim 通知済 As String
Dim 残日数 As Long
Dim outlookApp As Object
Dim outlookMail As Object
'対象シートを設定(シート名を変更する場合はここを修正)
Set ws = ThisWorkbook.Worksheets("期限管理")
'Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'データの最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
'2行目から最終行までループ処理
For i = 2 To lastRow
'セルの値を取得
タスク名 = ws.Cells(i, 1).Value
'期限日セルが空でないか確認
If ws.Cells(i, 2).Value <> "" Then
期限日 = ws.Cells(i, 2).Value
Else
GoTo NextRow
End If
メールアドレス = ws.Cells(i, 3).Value
通知済 = ws.Cells(i, 4).Value
'通知済でない、かつ期限が7日以内の場合にメール送信
'(通知日数を変更する場合は「7」を修正)
残日数 = 期限日 - Date
If 通知済 = "" And 残日数 <= 7 And 残日数 >= 0 Then
'メールを作成
Set outlookMail = outlookApp.CreateItem(0)
With outlookMail
.To = メールアドレス
.Subject = "【期限通知】" & タスク名 & "の期限が近づいています"
.Body = タスク名 & " の期限が近づいています。" & vbCrLf & vbCrLf & _
"期限日:" & Format(期限日, "yyyy年m月d日") & vbCrLf & _
"残り日数:" & 残日数 & "日" & vbCrLf & vbCrLf & _
"ご確認をお願いいたします。"
.Send
End With
'通知済フラグを設定
ws.Cells(i, 4).Value = "済"
Set outlookMail = Nothing
End If
NextRow:
Next i
'オブジェクトを解放
Set outlookApp = Nothing
MsgBox "期限通知メールの送信処理が完了しました。", vbInformation
End Sub
- 修正箇所1:シート名(16行目付近)
- 修正箇所2:通知日数(44行目付近)
- 修正箇所3:メール件名(49行目付近)
📝 修正箇所1:シート名(16行目付近)
「Set ws = ThisWorkbook.Worksheets(“期限管理”)」の「期限管理」の部分を、実際に使用しているシート名に変更します。
シート名が「期限管理」であれば修正不要です。
📝 修正箇所2:通知日数(44行目付近)
「If 通知済 = “” And 残日数 <= 7 And 残日数 >= 0 Then」の「7」の部分を、希望する通知日数に変更します。
3日前に通知したい場合は「3」に、14日前に通知したい場合は「14」に書き換えてください。
📝 修正箇所3:メール件名(49行目付近)
「.Subject = “【期限通知】”」の部分を、業務に合わせた件名に変更します。
たとえば「【契約更新のご案内】」や「【重要】支払期限のお知らせ」など、受信者にとってわかりやすい件名に調整してください。
修正が完了したら、前章で説明したテスト実行の手順に従って動作確認を行いましょう!
コード各部の解説(カスタマイズ用)
サンプルコードが正常に動作することを確認できたら、次はコードの内容を理解して自分なりのカスタマイズを加えてみましょう。
ここでは、コードを構成する主要な部分ごとに解説します。
コードの意味を理解しておけば、通知条件の変更やメール文面の調整、さらには応用的なカスタマイズも自力で行えるようになります。
少し長めの解説ですが、カスタマイズしたい方はぜひ読み進めてくださいね!
📝 変数宣言部分(Dimで始まる行)
コードの冒頭にある「Dim」で始まる行は、プログラム内で使用する変数(データを一時的に格納する箱のようなもの)を宣言しています。
「Dim ws As Worksheet」はワークシートを格納する変数、「Dim 期限日 As Date」は日付を格納する変数、「Dim outlookApp As Object」はOutlookアプリケーションを操作するための変数です。
変数名には日本語を使用していますので、何のためのデータかが直感的に理解しやすくなっています。
📝 シート指定部分
「Set ws = ThisWorkbook.Worksheets(“期限管理”)」の部分は、操作対象となるシートを指定しています。
「ThisWorkbook」は現在マクロが実行されているブック自身を指し、「Worksheets(“期限管理”)」で「期限管理」という名前のシートを取得しています。
この部分のシート名を変更すれば、別の名前のシートを対象にできます。
📝 Outlook起動部分
「Set outlookApp = CreateObject(“Outlook.Application”)」は、VBAからOutlookを操作するための準備を行っています。
「CreateObject」という関数でOutlookアプリケーションのインスタンス(操作可能な実体)を作成し、outlookApp変数に格納しています。
この方式は「遅延バインディング」と呼ばれ、Outlookのバージョンに依存せずに動作するメリットがあります。
📝 最終行取得部分
「lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row」は、A列にデータが入力されている最終行の行番号を取得しています。
これにより、データ件数が増減しても自動的に対応できます。
この処理は、シートの最下行から上方向に向かって最初にデータが入っているセルを探すという仕組みで動作しています。
📝 ループ処理部分
「For i = 2 To lastRow」から「Next i」までの部分は、ループ処理(繰り返し処理)を行っています。
変数iを2から最終行まで1ずつ増やしながら、各行のデータを順番に処理します。
2行目から開始しているのは、1行目がヘッダー行であるためです。
ループ内では、各行からタスク名・期限日・メールアドレス・通知済フラグの値を取得して、通知条件を判定しています。
📝 残日数計算部分
「残日数 = 期限日 – Date」の「Date」は、VBAで本日の日付を取得する関数です。
期限日から本日を引くことで、残り日数を計算しています。
📝 条件判定部分(カスタマイズのポイント)
「If 通知済 = “” And 残日数 <= 7 And 残日数 >= 0 Then」は、メールを送信するかどうかを判定する条件式です。
この条件は、通知済フラグが空欄(まだ通知していない)、かつ残日数が7日以下、かつ残日数が0以上(期限を過ぎていない)の場合にTRUEとなります。
「7」の数値を変更すれば、通知タイミングを調整できます。
また、期限を過ぎた案件にも通知したい場合は「残日数 >= 0」の条件を「残日数 >= -3」などに変更すれば、期限超過後3日までは通知対象とすることができます。
📝 メール送信部分
「Set outlookMail = outlookApp.CreateItem(0)」で新規メールアイテムを作成し、「With outlookMail」から「End With」の間で宛先、件名、本文を設定して「.Send」でメールを送信しています。
「.To」は宛先、「.Subject」は件名、「.Body」は本文を表しています。
- vbCrLf:改行コード(複数行の本文作成時に使用)
- Format(期限日, “yyyy年m月d日”):日付を「2025年2月15日」形式に整形
📝 通知済フラグ設定部分
メール送信後、「ws.Cells(i, 4).Value = “済”」で通知済フラグ列に「済」という文字列を書き込んでいます。
これにより、次回マクロを実行した際には、この行は通知済と判定され、二重にメールが送信されることを防ぎます。
📝 完了メッセージ部分
最後の「MsgBox」は、処理が完了したことをダイアログボックスで通知する機能です。
実運用で毎回メッセージが表示されるのが煩わしい場合は、この行を削除しても動作に影響はありません。
以上がコードの主要部分の解説です!これらの仕組みを理解しておけば、様々なカスタマイズに対応できますよ。
- 通知日数の変更
- 件名や本文の調整
- 通知条件の追加
VBAで期限通知メールが送信できない時の対処法
手順通りにVBAコードを貼り付けてテスト実行したにもかかわらず、メールが送信されない、あるいはエラーメッセージが表示されて処理が中断してしまうケースがあります。
VBAによる期限通知メールの実装では、コード自体に問題がなくても、Outlookの設定やエクセルのセキュリティ設定、日付データの形式など、周辺環境に起因するトラブルが発生しやすいものです。
「コードをコピペしたのに動かない!」という方は、まず環境設定を順番に確認していきましょう。
本章では、VBAで期限通知メールが動作しない場合に確認すべきポイントと、その対処法を解説します。
エラーが発生した際には、上から順番にチェックしていくことで、多くの問題を解決できるはずです。
Outlookの起動・連携を確認する
まず最初に確認すべきは、Outlookが使用可能な状態にあるかどうかです。
- Outlookが起動していない
- メールアカウントが未設定
- Outlookがインストールされていない
📝 Outlookが起動していない場合
最もよくあるトラブルは、Outlookが起動していない状態でマクロを実行しているケースです。
本記事で紹介したサンプルコードでは「CreateObject(“Outlook.Application”)」という記述でOutlookを操作していますが、この方式ではOutlookがバックグラウンドでも起動している必要があります。
マクロを実行する前に、必ずOutlookを起動し、メールの送受信ができる状態にしておいてください。
タスクバーやシステムトレイにOutlookのアイコンが表示されていれば、起動中であることを確認できます。
📝 メールアカウントが未設定の場合
次に確認すべきは、Outlookにメールアカウントが正しく設定されているかどうかです。
Outlookを初めて使用する場合や、新しいPCに移行した直後などは、メールアカウントの設定が完了していない可能性があります。
Outlookを開いて手動でメールを送信できるかどうかを確認し、送信できない場合はアカウント設定を見直してください。
📝 エラー「ActiveX コンポーネントはオブジェクトを作成できません」が表示される場合
「実行時エラー ‘429’: ActiveX コンポーネントはオブジェクトを作成できません。」というエラーメッセージが表示される場合は、OutlookがPCにインストールされていないか、正しくインストールされていない可能性があります。
Windowsのスタートメニューからアプリ一覧を確認し、Outlookが存在するかどうかを確認してください。
Outlookがインストールされていない場合は、Microsoft 365のサブスクリプションを契約するか、単体でOutlookを購入してインストールする必要があります。
会社のPCでOutlookが使用できない場合や、セキュリティポリシーによりVBAからのOutlook操作が制限されている場合は、システム管理者に相談してみましょう。
VBAのOutlook連携機能は、Microsoft Outlookに特化した仕組みであるため、他のメールクライアントでは別の実装方法が必要となります。
マクロのセキュリティ設定を変更する
エクセルでマクロを実行しようとした際に、「マクロが無効にされました」というセキュリティ警告が表示されたり、マクロ一覧に作成したはずのマクロが表示されなかったりする場合は、エクセルのマクロセキュリティ設定が原因である可能性が高いです。
エクセルは初期設定でマクロの実行を制限しており、悪意のあるマクロからユーザーを保護する仕組みが備わっています。
📝 セキュリティ警告バーが表示される場合
ファイルを開いた際に画面上部に「セキュリティの警告 マクロが無効にされました。」というメッセージバーが表示される場合の対処法を説明します。
このメッセージバーの右側にある「コンテンツの有効化」ボタンをクリックすることで、そのファイルに含まれるマクロが有効になります。
一度「コンテンツの有効化」をクリックすると、次回以降は同じファイルを開いた際に自動的にマクロが有効化されるようになります。
「コンテンツの有効化」ボタンが表示されない場合は、セキュリティセンターの設定変更が必要です。
エクセルのリボンメニューから「ファイル」タブをクリックし、「オプション」を選択します。
表示されるダイアログボックスの左側メニューから「トラスト センター」をクリックし、右側の「トラスト センターの設定」ボタンをクリックしてください。
トラスト センターのダイアログボックスが表示されたら、左側メニューから「マクロの設定」を選択します。
ここでマクロの実行に関するセキュリティレベルを設定できます。
選択肢は以下の4つです。
| 設定 | 内容 |
|---|---|
| 警告を表示せずにすべてのマクロを無効にする | マクロを一切実行できない最も厳しい設定 |
| 警告を表示してすべてのマクロを無効にする | エクセルの既定の設定。「コンテンツの有効化」で有効化可能 |
| デジタル署名されたマクロを除き、すべてのマクロを無効にする | 署名付きマクロのみ実行可能。自作マクロは通常実行不可 |
| すべてのマクロを有効にする | 警告なしですべて実行可能だが、セキュリティリスクあり |
この設定であれば、ファイルを開くたびにマクロを有効にするかどうかを選択でき、セキュリティと利便性のバランスが取れています。
「すべてのマクロを有効にする」は便利ですが、悪意のあるマクロも実行されてしまうリスクがあるため、Microsoft公式では推奨されていません。
📝 「信頼できる場所」を設定する方法
特定のフォルダに保存したファイルのマクロを常に有効にする「信頼できる場所」の設定もあります。
トラスト センターの左側メニューから「信頼できる場所」を選択し、「新しい場所の追加」ボタンをクリックして、期限管理ファイルを保存しているフォルダを登録します。
このフォルダに保存されたファイルは、マクロが自動的に有効化されるようになります。
日付セルの書式を確認する
VBAコードが正しく動作しない原因として意外と多いのが、期限日のセルに入力されている日付が「日付」ではなく「文字列」として認識されているケースです。
見た目は日付のように見えても、エクセルが内部的に文字列として扱っている場合、VBAで日付の比較演算を行おうとするとエラーが発生したり、意図しない結果になったりします。
- 書式が「標準」や「文字列」になっている
- セル内のデータが左寄せで表示されている
期限日が入力されているセルを選択し、セルの書式を確認してください。
リボンメニューの「ホーム」タブにある「数値」グループを見ると、現在のセルの書式が表示されています。
「標準」や「文字列」と表示されている場合は、日付として認識されていない可能性があります。
エクセルでは、数値や日付は標準でセルの右寄せ、文字列は左寄せで表示されます。期限日のセルが左寄せなら、文字列になっている可能性大です!
日付が文字列になってしまう原因としては、CSVファイルからデータをインポートした際に文字列として取り込まれた、日付を入力する際に全角文字を使用した、セルの書式が「文字列」に設定された状態で日付を入力した、などが挙げられます。
📝 日付データを修正する方法
この問題を解決するには、以下の手順で日付データを修正します。
期限日の列(B列)全体を選択し、リボンメニューの「ホーム」タブから「数値」グループのドロップダウンリストを開いて「短い日付形式」または「長い日付形式」を選択します。
これだけでは既存のデータが変換されない場合があるため、空いているセルに「1」と入力し、そのセルをコピーします。
期限日が入力されているセル範囲を選択し、右クリックして「形式を選択して貼り付け」を選択します。ダイアログボックスで「演算」セクションの「乗算」を選択して「OK」をクリックします。
これにより、文字列として認識されていた日付データが数値(日付のシリアル値)に変換されます。変換後、セルの書式を「短い日付形式」に設定し直してください。
別の方法として、DATEVALUE関数を使って「=DATEVALUE(B2)」のように変換することもできます。
📝 VBAコード内で日付変換する方法
VBAコード内で日付の変換を行う方法もあります。
サンプルコードの「期限日 = ws.Cells(i, 2).Value」の部分を「期限日 = CDate(ws.Cells(i, 2).Value)」に変更すると、文字列を日付型に変換してから処理を行います。
ただし、変換できない形式の文字列が入力されている場合はエラーになりますので、データ入力時点で正しい日付形式を使用することを心がけてください。
リボンメニューの「データ」タブから「データの入力規則」を選択し、入力値の種類を「日付」に設定することで、日付以外のデータが入力されることを防ぐことができます。
エクセルの期限通知メールをさらに便利にするカスタマイズ
基本的な期限通知メールの送信が正常に動作することを確認できたら、実務でより使いやすくするためのカスタマイズを検討してみましょう。
基本のコードはシンプルな構成になっていますが、運用を続けるうちに「同じ人に何度もメールが届いてしまう」「緊急度に応じてメールの文面を変えたい」「毎朝手動でマクロを実行するのが面倒」といった要望が出てくることがあります。
せっかく仕組みを作ったのに、運用で困ることって意外と多いですよね。ここからは実務で役立つカスタマイズを紹介します!
本章では、こうした実務上のニーズに応える4つのカスタマイズ方法を紹介します。
二重送信を防ぐフラグの活用、残日数に応じたメール文面の自動変更、Windowsタスクスケジューラによる自動実行、そしてVBA運用の限界を感じた場合の代替ツールについて解説します。
必要に応じて、自分の業務に合ったカスタマイズを取り入れてください。
二重送信を防ぐ通知済フラグの活用
本記事で紹介したサンプルコードには、すでに二重送信を防ぐための「通知済フラグ」の仕組みが組み込まれています。
しかし、この仕組みをより効果的に活用するためのポイントや、運用上の注意点を改めて整理しておきます。
📝 通知済フラグの基本的な仕組み
サンプルコードでは、メールを送信した後にD列(通知済フラグ列)に「済」という文字列を自動で書き込む処理を行っています。
次回マクロを実行した際には、この「済」フラグがある行はスキップされ、同じ案件に対して重複してメールが送信されることはありません。
この仕組みにより、毎日マクロを実行しても、通知は1案件につき1回だけ行われます。
シンプルな仕組みですが、これだけで「同じ人に何度もメールが届く」という問題を防げます!
まず、期限日が変更された場合の対応です。
たとえば、契約更新日が延期されて期限日を修正した場合、すでに「済」フラグが立っていると、新しい期限日に対する通知が行われません。
期限日を変更した際には、通知済フラグも手動でクリアする運用ルールを設けておくとよいでしょう。
次に、複数回の通知を行いたい場合の対応です。
たとえば「7日前と3日前と当日の3回通知したい」というニーズがある場合、単純な「済」フラグでは対応できません。
- 通知済フラグの列を複数に分ける(「7日前通知済」「3日前通知済」「当日通知済」)
- 「最終通知日」を記録する方式に変更(前回通知から一定期間経過で再通知)
以下は、最終通知日を記録して、前回通知から3日以上経過していれば再度通知するように修正したコードの該当部分です。
D列に「済」ではなく、通知した日付を記録するように変更しています。
'通知条件の判定部分を以下のように変更
Dim 最終通知日 As Variant
最終通知日 = ws.Cells(i, 4).Value
Dim 再通知可能 As Boolean
再通知可能 = False
If 最終通知日 = "" Then
再通知可能 = True
ElseIf IsDate(最終通知日) Then
If Date - CDate(最終通知日) >= 3 Then
再通知可能 = True
End If
End If
If 再通知可能 And 残日数 <= 7 And 残日数 >= 0 Then
'メール送信処理
'(中略)
'通知日を記録(「済」ではなく日付を記録)
ws.Cells(i, 4).Value = Date
End If
このように修正することで、最初の通知から3日以上経過した案件には再度通知メールが送信されるようになります
通知間隔の「3」という数字は、業務の要件に応じて調整してください。
残日数に応じてメール文面を自動変更(3日前・当日・超過)
期限までの残日数によって、メールの緊急度は異なります。
7日前の段階ではゆとりを持った案内で十分ですが、当日や期限超過の場合は、より強い注意喚起が必要になるでしょう。
残日数に応じてメールの件名や本文を自動で切り替える機能を追加することで、受信者に適切なアクションを促すことができます。
「7日前も当日も同じ文面」だと、受信者が緊急度を判断しにくいですよね。自動で文面を変えられると便利です!
- 4日以上前:通常の事前通知(【期限通知】)
- 3日前〜1日前:注意喚起(【重要】)
- 当日:緊急通知(【緊急・本日期限】)
- 期限超過:超過警告(【期限超過】)
以下は、残日数に応じてメール文面を変更するようにカスタマイズしたコードです。
メール作成部分を以下のように修正してください。
'メールを作成
Set outlookMail = outlookApp.CreateItem(0)
Dim 件名 As String
Dim 本文 As String
'残日数に応じて件名と本文を設定
Select Case 残日数
Case Is > 3
'4日以上前:通常の事前通知
件名 = "【期限通知】" & タスク名 & "の期限が近づいています"
本文 = タスク名 & " の期限が近づいています。" & vbCrLf & vbCrLf & _
"期限日:" & Format(期限日, "yyyy年m月d日") & vbCrLf & _
"残り日数:" & 残日数 & "日" & vbCrLf & vbCrLf & _
"余裕を持ってご対応をお願いいたします。"
Case 1 To 3
'3日前〜1日前:注意喚起
件名 = "【重要】" & タスク名 & "の期限が迫っています"
本文 = "※このメールは期限間近のため、注意喚起としてお送りしています。" & vbCrLf & vbCrLf & _
タスク名 & " の期限まであと " & 残日数 & "日 です。" & vbCrLf & vbCrLf & _
"期限日:" & Format(期限日, "yyyy年m月d日") & vbCrLf & vbCrLf & _
"至急ご確認のうえ、必要な対応をお願いいたします。"
Case 0
'当日:緊急
件名 = "【緊急・本日期限】" & タスク名
本文 = "※※※ 本日が期限日です ※※※" & vbCrLf & vbCrLf & _
タスク名 & " の期限は本日です。" & vbCrLf & vbCrLf & _
"期限日:" & Format(期限日, "yyyy年m月d日") & "(本日)" & vbCrLf & vbCrLf & _
"直ちにご確認・ご対応をお願いいたします。"
Case Is < 0
'期限超過
件名 = "【期限超過】" & タスク名 & "の期限が過ぎています"
本文 = "※※※ 期限を超過しています ※※※" & vbCrLf & vbCrLf & _
タスク名 & " の期限を " & Abs(残日数) & "日 超過しています。" & vbCrLf & vbCrLf & _
"期限日:" & Format(期限日, "yyyy年m月d日") & vbCrLf & vbCrLf & _
"早急にご確認・ご対応をお願いいたします。"
End Select
With outlookMail
.To = メールアドレス
.Subject = 件名
.Body = 本文
.Send
End With
また、期限超過の案件も通知対象に含めるため、通知条件の判定部分も以下のように修正します。
'変更前
If 通知済 = "" And 残日数 <= 7 And 残日数 >= 0 Then
'変更後(期限超過3日までを含める場合)
If 通知済 = "" And 残日数 <= 7 And 残日数 >= -3 Then
この修正により、期限の7日前から期限超過3日後までの案件が通知対象となり、それぞれの緊急度に応じた文面でメールが送信されるようになります。
件名や本文の表現は、自社の業務スタイルや受信者との関係性に合わせて適宜調整してくださいね
タスクスケジューラで毎朝自動実行
ここまでの設定では、マクロを実行するたびにエクセルを開いて「開発」タブから「マクロ」を実行する必要があります。
毎日この操作を行うのは手間がかかりますし、担当者が不在の日は通知が送信されないというリスクもあります。
Windowsに標準搭載されている「タスクスケジューラ」機能を活用すれば、毎朝決まった時刻に自動でマクロを実行する仕組みを構築できます。
毎朝手動でマクロを実行するのは面倒ですよね。タスクスケジューラを使えば完全自動化できます!
VBScriptファイルの作成
タスクスケジューラでエクセルマクロを自動実行するためには、まずマクロを自動実行するためのVBScriptファイルを作成します。
メモ帳を開いて以下のコードを入力し、拡張子を「.vbs」として保存してください。
ファイル名は「期限通知実行.vbs」などわかりやすい名前にしておきます。
Dim xlApp
Dim xlBook
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
xlApp.DisplayAlerts = False
Set xlBook = xlApp.Workbooks.Open("C:\Users\ユーザー名\Documents\期限管理_通知システム.xlsm")
xlApp.Run "期限通知メール送信"
xlBook.Close SaveChanges:=True
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
日本語を含むパスでも動作しますが、パスにスペースが含まれる場合は注意が必要です。
タスクスケジューラでタスクを作成
VBScriptファイルを保存したら、次にタスクスケジューラでタスクを作成します。
Windowsのスタートメニューで「タスクスケジューラ」と検索して起動してください。
タスクスケジューラが開いたら、右側の「操作」パネルから「タスクの作成」をクリックします。
タスクの名前を入力します。「期限通知メール自動実行」など、わかりやすい名前を付けてください。「ユーザーがログオンしているときのみ実行する」が選択されていることを確認します。
「新規」ボタンをクリックします。「タスクの開始」で「スケジュールに従う」を選択し、「毎日」を選んで実行時刻を設定します。たとえば、毎朝8時30分に実行する場合は「8:30:00」と入力します。「OK」をクリックしてトリガーの設定を完了します。
「新規」ボタンをクリックします。「操作」で「プログラムの開始」が選択されていることを確認し、「プログラム/スクリプト」欄に先ほど作成したVBScriptファイルのフルパス(たとえば「C:\Users\ユーザー名\Documents\期限通知実行.vbs」)を入力します。「OK」をクリックして操作の設定を完了します。
特に変更する必要はありませんが、「コンピューターをAC電源で使用している場合のみタスクを開始する」のチェックを外しておくと、ノートPCをバッテリー駆動で使用している場合でもタスクが実行されます。
「タスクが失敗した場合の再起動」にチェックを入れておくと、何らかの理由でタスクが失敗した場合に自動でリトライされます。
すべての設定が完了したら「OK」をクリックしてタスクを保存します。これで、毎朝指定した時刻にVBScriptが実行され、エクセルファイルが自動で開いてマクロが実行され、期限通知メールが送信されるようになります。
動作テストと注意点
タスクが正しく動作するかテストするには、作成したタスクを右クリックして「実行」を選択します。
エクセルが起動し、マクロが実行されてメールが送信されれば成功です。
PCがスリープ状態やシャットダウン状態の場合、タスクは実行されません。
会社のPCを常時起動しておくか、スリープから復帰してタスクを実行する設定を行うことで対応できます。
共有PCや常時起動のサーバーがあれば、そちらに設定しておくと確実ですね
【番外編】エクセルのような入力画面のAIタスク管理ツール「スーツアップ」
VBAによる期限通知メールの自動化は、追加コストをかけずに実現できる点で非常に有用です。
しかし、運用を続けるうちにいくつかの課題に直面することがあります。
- 属人化の問題:作成した担当者が異動・退職すると対応できる人がいなくなる
- 保守の難しさ:業務要件の変更に合わせたコード修正がVBA初心者には困難
- 機能の限界:複雑な条件分岐、複数人への通知、承認ワークフローなどへの対応が難しい
「作った人しかわからない」という状態になりがちなのがVBAの悩みどころですよね…
こうした課題を感じている場合は、専用のタスク管理ツールへの移行を検討するのも一つの選択肢です。
近年は、エクセルに近い操作感でありながら、通知機能やワークフロー機能が標準搭載されたツールが登場しています。
📝 スーツアップとは
「スーツアップ」は、エクセルのような入力画面を持ちながら、期限通知やタスク管理機能を備えたAIタスク管理ツールです。
エクセルでの管理に慣れた方でも違和感なく移行でき、VBAのような技術的な設定なしに期限通知を実現できます。
複数人でのタスク共有や、スマートフォンからのアクセスにも対応しており、チームでの期限管理に適しています。
| 判断基準 | ツール導入を検討すべきケース |
|---|---|
| 管理する案件数 | 100件を超える場合 |
| チーム体制 | 複数人でタスクを共有する必要がある場合 |
| VBA保守 | コードの修正・保守に不安がある場合 |
| アクセス環境 | モバイルからもアクセスしたい場合 |
まずはVBAで期限通知の仕組みを構築し、運用しながら自社の要件を明確にしたうえで、必要に応じてツール導入を検討するというアプローチが現実的です。
いきなりツールを導入するより、VBAで試してから判断するのがおすすめです。自社に必要な機能が明確になりますよ!
まとめ:エクセルで期限通知メールを今すぐ始める5ステップ
ここまで、エクセルで期限通知メールを自動送信するための方法を詳しく解説してきました。
VBAとOutlookを連携させることで、追加のコストをかけずに期限管理の自動化を実現できることがおわかりいただけたと思います。
最後に、本記事の内容を5つのステップに整理します。
この手順に従って作業を進めれば、今日中に期限通知メールの自動送信システムを完成させることができます。
すでに読み進めてきた方は確認用のチェックリストとして、これから実装を始める方はロードマップとして活用してくださいね!
📝 ステップ1:期限管理シートの作成
エクセルで新規ブックを作成し、シート名を「期限管理」に変更します。
1行目にヘッダーとして、A1セルに「タスク名」、B1セルに「期限日」、C1セルに「メールアドレス」、D1セルに「通知済」と入力します。
2行目以降に管理したい案件のデータを入力していきます。
あわせて、条件付き書式を設定しておくと、期限が近い案件や期限超過の案件を視覚的に把握できるようになります。
この事前準備をしっかり行うことで、VBAコードが正しく動作する基盤が整います。
📝 ステップ2:VBEを開いて標準モジュールを挿入
エクセルでAlt+F11キーを押してVBE(Visual Basic Editor)を起動します。
プロジェクトエクスプローラーでブック名を右クリックし、「挿入」から「標準モジュール」を選択して、Module1を作成します。
開発タブが表示されていない場合は、エクセルのオプションからリボンのユーザー設定を開き、開発タブを有効にしてください
VBEの画面が開けば、コードを記述する準備は完了です。
📝 ステップ3:VBAコードの貼り付けと修正
本記事で紹介したサンプルコードをコピーして、Module1のコードウィンドウに貼り付けます。
貼り付け後、3箇所を自分の環境に合わせて修正します。
・シート名:「期限管理」以外を使用している場合は変更
・通知日数:7日前以外のタイミングで通知したい場合は数値を変更
・メール件名:業務に合った件名に調整
修正が完了したら、デバッグメニューから「VBAProjectのコンパイル」を実行して、文法エラーがないことを確認しておきましょう。
📝 ステップ4:マクロ有効ブックとして保存
「ファイル」タブから「名前を付けて保存」を選択し、ファイルの種類で「Excelマクロ有効ブック(*.xlsm)」を選択して保存します。
この形式で保存しないと、ファイルを閉じた際にVBAコードが失われてしまいます。必ずこの手順を守ってくださいね!
保存後、ファイルを一度閉じて再度開き、VBEでコードが保持されていることを確認すると安心です。
📝 ステップ5:テスト実行と本番運用の開始
本番運用を始める前に、必ず自分自身のメールアドレス宛にテスト送信を行います。
期限管理シートにテスト用のデータを入力し、期限日を本日から7日以内の日付、メールアドレスを自分のアドレスに設定します。
Outlookが起動していることを確認したら、「開発」タブの「マクロ」から「期限通知メール送信」を選択して実行します。
自分のメールボックスに通知メールが届き、期限管理シートの通知済列に「済」と入力されていれば成功です。
テストが完了したら、テスト用データを削除し、実際に管理したい案件のデータを入力して本番運用を開始しましょう。
以上の5ステップで、エクセルによる期限通知メールの自動送信システムが完成します。
| 習熟度 | 作業時間の目安 |
|---|---|
| エクセル操作に慣れている方 | 30分〜1時間程度 |
| VBAが初めての方 | 2時間程度 |
本記事の手順に沿って進めれば、VBA初心者の方でも必ず完成させられますよ!
運用を開始した後は、必要に応じてカスタマイズを加えていくことをおすすめします。
- 通知済フラグの運用ルール:二重送信を防止
- 残日数に応じた文面変更:緊急度を伝える
- タスクスケジューラで毎朝自動実行:完全自動化
本記事で紹介したカスタマイズを取り入れることで、より実務に適したシステムに発展させることができます。
エクセルとVBAによる期限通知メールの自動化は、コストをかけずに業務効率を向上させる強力な手段です。
契約更新日の見落とし、支払期限の超過、タスクの締切忘れなど、期限管理に関するトラブルを未然に防ぐことができます。
ぜひ本記事を参考に、今日から期限通知メールの自動化に取り組んでみてください。
期限管理の自動化に成功したら、同じ仕組みを応用して他の業務にも展開できますよ!
- 在庫の発注タイミング通知
- 定期点検のリマインダー
- 資格更新日の事前通知
VBAによる自動化の基本を身につけることで、日々の業務効率化の幅が大きく広がるでしょう。


株式会社スーツ 代表取締役社長CEO
2013年3月に、新卒で入社したソーシャル・エコロジー・プロジェクト株式会社(現社名:伊豆シャボテンリゾート株式会社、東証スタンダード上場企業)の代表取締役社長に就任。同社グループを7年ぶりの黒字化に導く。2014年12月に株式会社スーツ設立と同時に代表取締役に就任。2016年4月より総務省地域力創造アドバイザー及び内閣官房地域活性化伝道師。2019年6月より国土交通省PPPサポーター。2020年10月にYouTuber事務所の株式会社VAZの代表取締役社長に就任。月次黒字化を実現し、2022年1月に上場企業の子会社化を実現。2022年12月にスーツ社を新設分割し同社を商号変更、新たに株式会社スーツ設立と同時に代表取締役社長CEOに就任。
現在、スーツ社では、チームのタスク管理ツール「スーツアップ」の開発・運営を行い、中小企業から大企業のチームまで、日本社会全体の労働生産性の向上を目指している。