シートのVBAコード
下記に変更してください。
Option Explicit
'予定数を日毎に割当て
Private Sub ExSetYotei(tget As Range)
Dim yoteisu As Long
Dim daysu As Long
Dim startday As Long
Dim lastday As Integer
Dim i As Integer
'予定数
yoteisu = tget.Offset(0, -2)
'1日の数量
daysu = tget.Offset(0, -1)
'開始日
startday = tget
'最終日を取得
lastday = MonthLastDay(Worksheets("機種マスター").Range("L9"), Worksheets("機種マスター").Range("L10"))
'全日数を空白にする
For i = 1 To lastday
tget.Offset(0, i) = ""
Next
If yoteisu > 0 And daysu > 0 And startday > 0 Then
'最終日の前日までの予定数をセットする
For i = startday To lastday - 1
If yoteisu - daysu > 0 Then
tget.Offset(0, i) = daysu
yoteisu = yoteisu - daysu
ElseIf yoteisu > 0 Then
tget.Offset(0, i) = yoteisu
yoteisu = 0
Else
tget.Offset(0, i) = ""
End If
Next
'最終日に余りがあればセット
If yoteisu > 0 Then
tget.Offset(0, lastday) = yoteisu
End If
End If
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Integer
Dim rg As Range
For i = -3 To -1
'予定数 か 1日の数量 か 開始日 のセルが変更されたかチェック
If Target.Offset(0, i) = "予定" And Target.Offset(1, i) = "実績" Then
'開始日のセルに指定
Set rg = Target.Offset(0, i + 3)
'予定数を日毎に割当て
ExSetYotei rg
Exit For
End If
Next
End Sub
実行結果の画面
予定数 か 1日の数量 か 開始日 に数値が入力されると、開始日から自動的に割当てていきます。
空白か0の場合は、全日数が空白になります。
開始日から割り当てていき、途中で予定数がゼロになってしまった場合はそこから空白になります。
予定数がはけない場合は、最終日に残りが配分されます。