アプリケーションとしてのVBA Excel(エクセル) VBA の役立つ Tips の紹介

アプリケーションとしてのVBA

稼働日を計算する

稼働日を計算する


  仕事で工期とかリードタイムとかを良く計算しませんか。
  これを計算するときは休日を除きたいですよね。

  Excel には このための Workday とか NetWorkday の関数が用意されています。
  しかし、これらの関数は祭日等の指定がめんどくさいです。

  さらに、休みの日は各社独自に決めていると思います。

  そこで、自社の休日をあらかじめ入力したシートを作成しておいて、
  稼働日を計算する Function を作成しました。



  example4 を Download して、Workbook を開いてください。
    
  Sheet1 に休日が記述してあります。
    
  yyyy年mm月dd日 のセルが計算できるように表を作ってあります。

  1列が1ヶ月で、行が日にちです。休日になる日に 1 を入力してあります。

Function Operation_day(Date1, Date2) As Integer
    
    Dim Date_Start, Date_Stop, CheckDay As Date
    Dim Polarity, Cal_column, Cal_row As Integer
    
    
    '稼働日の初期化
    Operation_day = 0
    
    'Date1 と Date2 のどちらが大きいか判断して、For ループが小さい値
    'からスタートするように Date_Start と Date_Stop を代入します
    
    If Date1 > Date2 Then           '
        Date_Start = Date2
        Date_Stop = Date1
        Polarity = -1
    Else
        Date_Start = Date1
        Date_Stop = Date2
        Polarity = 1
    End If
    
    For CheckDay = Date_Start To Date_Stop
    
        'CheckDay の yy年mm月 が記述してある 列番号を計算します
        Cal_column = (Year(CheckDay) - 2000) * 12 _
                                           + Month(CheckDay) - 2
        
        'CheckDay の dd日が記述してある 行番号を計算します
        Cal_row = Day(CheckDay) + 3
        
        'Cells形式で yy年mm月dd日 のセルを参照します
        If Workbooks("Calendar.xls").Sheets("Sheet1"). _
                                 Cells(Cal_row, Cal_column) <> 1 Then
        
        '休みでなかったら稼動日をカウントします
            Operation_day = Operation_day + 1
        End If
        
    Next
    
    '極性をつけます
    Operation_day = Operation_day * Polarity
    
End Function

  稼働日に プラス/マイナス があるのはおかしいと思うかもしれませんが、

  何日前? という場合にも使えると思うので、極性をつけてあります。
    
  実際の使い方は、課題4(example4) の 使用例 のシートに書いてあります。


Copy (C) 2005   アプリケーションとしてのVBA   All Rights Reserved.