見出し画像

「取り寄せ品」休日を除外した、入荷までの平均日数を出す

「取り寄せ品」の納期確認に関するお問い合わせが多く、これまではお客様からのメールを受け取り次第、メーカーに通知し、その返答をお待ちいただいてからご連絡しておりました。
しかし、お問い合わせの件数が増えたことで、メールを担当するスタッフとメーカーの双方に負担が大きくなってしまい、結果としてお客様にも長時間お待ちいただく状況が生じておりました。

この問題を解決するために、当社では過去2週間の販売データを基に、土日及び祝日を除外した発注から入荷までの平均所要日数を、お知らせするツールを開発しました。
このツールを使用することで、従来のように複数の工程を経ることなく、お客様には数分で返答が可能となり、大幅な時間短縮を実現しました。

ただし、このツールを適切に機能させるためには、「休日_テーブル」と「納期確認テーブル」の準備が必要です。
これは、企業ごとに異なる祝日を考慮に入れる必要があるためです。
休日_テーブルには、例えば「2024/03/04」のように、休日を列挙していただく必要があります。

納期を確認したい製品番号については、過去2週間の「発注日」と「入荷日」を「納期確認テーブル」にクエリで追加し
下記のコードを用いることで、土日及び祝日を除外した「入荷までの日数」を算出できます。
これにより、より迅速かつ正確に納期の情報を提供できるようになりました。
これがうまくいけば、さらに進化した自動応答もしくは、直接確認に切り替えたいと思います。

実際の通知内容

トヨタ 7555268020
商品の納期について、お伝えいたします。
こちらの、商品は平均して約(1)日間で入荷しております。
※土日・祝祭日は除きます。

こちらの日数は過去2週間のデータに基づく推定であり
突発的なメーカーの在庫切れなど、予期せぬ事態には対応が
難しい場合がありますので、その点はご理解お願いします。



Microsoft Accessで使用しております。
・納期確認テーブル (過去2週間分のデータ)

・休日_テーブル 

Public Function CalculateWorkingDays() As Integer
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sql As String
    Dim startDate As Date
    Dim endDate As Date
    Dim totalDays As Integer
    Dim nonWorkingDays As Integer
    Dim currentDay As Date
    Dim i As Integer ' この行を追加

    Set db = CurrentDb()

    ' 納期確認テーブルを開く
    sql = "SELECT * FROM [納期確認テーブル]"
    Set rs = db.OpenRecordset(sql, dbOpenDynaset)

    If Not rs.EOF Then
        rs.MoveFirst
        Do Until rs.EOF
            startDate = rs!発注日
            endDate = rs!入荷日
            totalDays = DateDiff("d", startDate, endDate)
            nonWorkingDays = 0

            ' 開始日と終了日の間の土日と祝祭日をカウント
            For i = 0 To totalDays
                currentDay = DateAdd("d", i, startDate)
                ' 土曜日または日曜日の場合
                If Weekday(currentDay) = vbSaturday Or Weekday(currentDay) = vbSunday Then
                    nonWorkingDays = nonWorkingDays + 1
                Else
                    ' 祝祭日の場合
                    If Not IsNull(DLookup("休日", "休日_テーブル", "休日 = #" & Format(currentDay, "mm/dd/yyyy") & "#")) Then
                        nonWorkingDays = nonWorkingDays + 1
                    End If
                End If
            Next i

            ' 実労働日数を計算して入荷までの日数に保存
            rs.Edit
            rs!入荷までの日数 = totalDays - nonWorkingDays
            rs.Update

            rs.MoveNext
        Loop
    End If

    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Function


この記事が気に入ったらサポートをしてみませんか?