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

Step 12 祝日もとばす


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




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

ブックコード

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

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


シートのVBAコード

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

'日付をセット
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(日)は空白で数量がセットされていません。

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

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


Copyright (c) Excel-Excel ! All rights reserved