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

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

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

スポンサーリンク



Homeに戻る > Excelでアプリケーションソフト > 生産予定・実績表アプリ

シートのVBAコード

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

'予定数を日毎に割当て
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

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

Private nowbusy As Boolean

Private Sub Workbook_Open()
    nowbusy = False
End Sub

スポンサーリンク


実行結果の画面

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

スポンサーリンク




Homeに戻る > Excelでアプリケーションソフト > 生産予定・実績表アプリ

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


Copyright (c) Excel-Excel ! All rights reserved