Dynamics 365で期限が迫っている案件アラートを(半分)自動化してみました


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)がラクになるよう学習を続け、行動していきます。