
Dynamics 365で、受注予定日が迫っている案件に対するアラートを、人力からシステムを使ったものに置き換えてみました。
きっかけ
受注予定日が迫っている案件の進捗確認が、人力であったためです。
週次での営業部会において、営業部長が各メンバーに順番に確認するという状態で、時間と労力が多くかかっていました。
進捗確認にかける時間をスリムにして、部会を生産的にしたいという思いで取り組みました。
Power Platformで自動化を試みる!しかし…。
まずは、Dynamics 365とPower Platformを連携し、自動的に各メンバーにアラートが上がるフローを作ろうと画策しました。
「Power Platform?何それ美味しいの?」って方は、下記のページをご参照ください。
Power Platformとは?できること、やってみたことをまとめました(JBサービス株式会社)
要は、これまでプログラミングのスキルが必須だったアプリ開発や業務フロー構築が、ノンエンジニアでも出来ちまうんだ!…というステキなプラットフォームです。
しかし、結果的にこの試みは挫折しました。
理由は、Dynamics 365とPower Platformを連携する権限がなかったからです。
弊社のMicrosoft MVPのもくだい大先生(※)に泣きつきながら、フローをちょこちょこ作り、「これは…できる!」と確信した後に判明しました。
(※)もくだい大先生のXアカウント
もくだいさん🇯🇵 365おじさん (@mokudai) / X
かなり落胆しましたね。早めに確認すべきでした。
何とかならないか…と情シスに掛け合ったのですが認めていただけず、断念。
まぁ、「権限をホイホイ渡したら、あきまへんで!」という最小権限の原則は私も理解しているので、仕方がないです。
VBAによる力業でなんとか実装。。。
しかし、情シスは完全に非協力という訳では全くなく、代替案を提示してくれました。
それは、「1週間以内の案件一覧を見れるビューから何とかできるのでは?」という内容でした。
ということで、下記の4ステップでメールが飛ぶよう、VBAを書きました。
手動の部分が多い、ツッコミどころの多いものですが、早く実現する必要があったので致し方なし。
①「1週間以内の案件一覧」をExcelにエクスポートする

↓ 「Excelにエクスポート」を選ぶと、自動的にExcelがダウンロードされます。

②Excelの名前を、VBAが反応できるように変更する
後述するVBAでは、ダウンロートしたExcelの名前を「全社」と変更し、デスクトップに置く想定をしております。
③VBAを実行する
Sub SendEmail2()
Dim OutApp As Object
Dim OutMail As Object
Dim wbMail As Workbook
Dim wsMail As Worksheet
Dim rng As Range
Dim lastRow As Long
Dim i As Long
Dim mailBody As String
Set OutApp = CreateObject("Outlook.Application") 'Outlookアプリケーションの作成
Set OutMail = OutApp.CreateItem(0) '新しいメールの作成
Set wbMail = Workbooks.Open("C:hogehoge\Desktop\全社.xlsx") 'メールを送信する対象のワークブックを開く
Set wsMail = wbMail.Sheets("全社の1週間以内に受注予定の案件") 'シート名を指定
Set rng = wsMail.Range("F:F") 'F列を対象とする
lastRow = wsMail.Cells(wsMail.Rows.Count, "F").End(xlUp).Row ' 最終行を取得
mailBody = "" ' メール本文の初期化
' データを取得してメール本文を作成する
For i = 2 To lastRow ' データ行のみにループを適用
If wsMail.Cells(i, "F").Value = "特定の営業マン" Then ' 条件を適切なものに変更
' D列とE列の値をメール本文に追加
mailBody = mailBody & "顧客名: " & wsMail.Cells(i, "D").Value & vbCrLf
mailBody = mailBody & "案件名: " & wsMail.Cells(i, "E").Value & vbCrLf
mailBody = mailBody & "受注予定日: " & wsMail.Cells(i, "J").Value & vbCrLf & vbCrLf
End If
Next i
With OutMail
.To = "hogehoge@hoge.com" 'アラートメールの宛先
.Cc = "joshi-1@hoge.com; joshi-2@hoge.com" 'Ccに入れる上司たちのメールアドレス
.Subject = "【要確認】受注予定日が近づいています!" 'メール件名
.Body = "CRMはこちら→https://hogehoge.dynamics.com/" & vbCrLf & vbCrLf & mailBody '本文にmailBodyを追加
.Importance = 2 ' 重要度を高くする
End With
' メールの表示(または送信する場合は .Send)
OutMail.Display
Set OutApp = Nothing
Set OutMail = Nothing
Set wbMail = Nothing
Set wsMail = Nothing
Set rng = Nothing
End Sub
④手動でメールを送る
メールの例は下記です。
自動でメールを送るのではなく、メール作成画面を表示し、送信前に目視で確認できるようにしております。

前職からVBAに慣れ親しんでおり、実装にはあまり時間がかかりませんでした。
普通に仕事がある平日に、業務の片手間でちょこちょこ進めて3日ほど、合計1〜2時間ほどで実装できました。
これで、当初やりたかったDynamics 365で期限が迫っている案件アラートを、(半分)自動化することに成功しました。
結果やいかに…?
数値測定した訳ではないですが、古い案件がDynamics 365に残り続けているという事象は明らかに減った気がします。
また、そもそも該当案件がない(要は各営業が適切に案件管理できている)という週も多くあり、メールを飛ばさない週も出てきました。
今後の展望(要修正です)
時間があるときに、完全に自動でやってくれるようフローを見直したいです。
また、VBAではなくPythonなど、他の手段も検討してみたいです。
今後、より一層現場の営業(自分を含むw)がラクになるよう学習を続け、行動していきます。