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

Step 12 祝日もとばす


土曜と日曜と祝日には予定数を割り振らないようにします。
土曜と日曜と祝日のセルのIDに「土」「日」「祝」をセットし、割り振り時それを見て判断しています。

メニューに戻る


スポンサーリンク





ブックコード

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

'予定数を日毎に割当て
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
    Dim lrow As Long
    Dim lcol As Long
    Dim s1 As String
    
    nowbusy = True
    '予定数
    yoteisu = tget.Offset(0, -2)
    '1日の数量
    daysu = tget.Offset(0, -1)
    '開始日
    startday = tget
    
    '最終日を取得
    lastday = MonthLastDay(Worksheets("機種マスター").Range("L9"), Worksheets("機種マスター").Range("L10"))
    
    lrow = Worksheets("機種マスター").Range(Worksheets("機種マスター").Range("L4")).Row
    lcol = Worksheets("機種マスター").Range(Worksheets("機種マスター").Range("L4")).Column + 5
    
    '全日数を空白にする
    For i = 1 To lastday
        tget.Offset(0, i) = ""
    Next
    If yoteisu > 0 And daysu > 0 And startday > 0 Then
        Do
            s1 = Cells(lrow, lcol + startday).ID
            
            '土曜と日曜と祝日はパス
            If s1 <> "土" And s1 <> "日" And s1 <> "祝" 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
            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 ExDaySet()
    Dim i As Integer
    Dim s As String
    Dim saijitu As String
    Dim lastday As Integer
    Dim tdate As Date
    Dim ncol As Integer
    Dim nrow As Integer
    
    tdate = Format(Range("L9") & "/" & Range("L10") & "/1", "yyyy/mm/dd")
    
    Worksheets(Sheets.Count).Select
    Worksheets(Sheets.Count).Range(Range("L4")).Select
    ActiveCell.Offset(columnOffset:=6).Activate
    
    lastday = MonthLastDay(Range("L9"), Range("L10"))
    For i = 1 To lastday
        '国民の祝日か判定
        saijitu = GetSaijituName(tdate)
        If saijitu <> "" Then
            'フォント色をセット
            ActiveCell.Font.Color = Range("L8").Interior.Color
            '祭日名のコメントを追加
            ActiveCell.AddComment saijitu
            ActiveCell.Comment.Visible = True
            '追加したコメントを選択
            Selection.Comment.Shape.Select True
            '自動サイズにする
            Selection.AutoSize = True
            ' コメントを非表示する
            ActiveCell.Comment.Visible = False
            ActiveCell.ID = "祝"
        Else
            '曜日の取得
            s = GetWeekDay(tdate)
            '文字のフォント色をセット
            If s = "日" Then
                ActiveCell.Font.Color = Range("L7").Interior.Color
                ActiveCell.ID = "日"
            ElseIf s = "土" Then
                ActiveCell.Font.Color = Range("L6").Interior.Color
                ActiveCell.ID = "土"
            Else
                ActiveCell.Font.Color = Range("L5").Interior.Color
            End If
        End If
        '中央配置
        ActiveCell.HorizontalAlignment = xlHAlignCenter
        ActiveCell = i & "(" & s & ")"
        tdate = tdate + 1
        
        ActiveCell.Offset(columnOffset:=1).Activate
    Next
    Worksheets(Sheets.Count).Range(Range("L4")).Select
End Sub

実行結果の画面

[2007年5月の場合]
機種名:AIU-1512Bの場合、2日から割り振り、3(憲法記念日)と4(国民の祝日)と5(土)と6(日)は空白で数量がセットされていません。




メニューに戻る

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


Copyright (c) Excel-Excel ! All rights reserved