Excelで生産予定・実績表を作ってみよう

Step 11 土曜、日曜をとばし予定数を割り振る

Step10を変更し、土曜と日曜には予定数を割り振らないようにします。
予定数が余った場合は、最終日の次の列に記入します。

メニューに戻る

スポンサーリンク





シートコード

下記に変更してください。

'予定数を日毎に割当て
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
    Dim tdate As Date
    Dim youbi As Integer
    
    nowbusy = True
    '予定数
    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
        '開始する曜日を取得
        tdate = Format(Worksheets("機種マスター").Range("L9") & "/" & _
        Worksheets("機種マスター").Range("L10") & "/" & startday, "yyyy/mm/dd")
        youbi = Weekday(tdate)
        Do
            '土曜と日曜はパス
            If youbi <> 1 And youbi <> 7 Then
                If yoteisu - daysu > 0 Then
                    tget.Offset(0, startday) = daysu
                    yoteisu = yoteisu - daysu
                ElseIf yoteisu > 0 Then
                    tget.Offset(0, startday) = yoteisu
                    yoteisu = 0
                Else
                    Exit Do
                End If
            End If
            '土曜日の場合
            If youbi = 7 Then
                youbi = 1
            Else
                youbi = youbi + 1
            End If
            startday = startday + 1
        Loop Until startday > lastday
        '最終日に余りがあればセット
        If yoteisu > 0 Then
            tget.Offset(0, lastday + 1) = yoteisu
        Else
            tget.Offset(0, lastday + 1) = ""
        End If
    End If
    
    nowbusy = False
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim i As Integer
    Dim rg As Range
        
    '割当て中はパス
    If nowbusy Then
        Exit Sub
    End If
    
    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

下記のコードを追加してください。

Private nowbusy As Boolean

Private Sub Workbook_Open()
    nowbusy = False
End Sub

スポンサーリンク



実行結果の画面

機種名:AIU-1512Bの場合、1日から割り振り、3(土)と4(日)は空白で数量がセットされていません。
機種名:JK-KJ-788の場合、3日から割り振り、3(土)と4(日)は空白で数量がセットされていません。





メニューに戻る

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved