当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。

テクてく Lotus 技術者 Slack に参加しよう!

2010年3月23日火曜日

LotusScriptで@BusinessDaysを実現してみる

皆さん、3連休はいかがお過ごしでしたか?
筆者は花粉症がひどく、辛い3日間でした。
でも、今日からはまた仕事ですので、そんな泣き言は言ってられません。

ということで、やる気を出すためのボタンクリックをお願いします!
にほんブログ村 IT技術ブログへ
ありがとうございます。


さて、今日は・・・
営業日数を算出するという事をLotusScriptで実現する必要があったので、やってみました。
@関数では、@BusinessDaysというのがあるので良いのですが、LotusScriptにはそれらしきものは見あたりません。

Evaluate( "@BusinessDays(~" )
でやっても良いのですが、それでは芸がないのでLotusScriptでやってみましょう。

単純に組んでみました。
開始日と終了日の間に、どれだけ日付があるかをカウントしているだけです。
その間に、定義した休日がくる場合は、カウントしないというようにしています。

@BusinessDaysに似せて作っているので、引数は以下の4つです。
  • startDate 開始日
日付型ではなく、テキストです。
  • endDate  終了日
日付型ではなく、テキストです。
  • daysToExclude 営業日としてカウントしない曜日(1が日曜日、2が月曜日・・・7が土曜日)
複数設定する場合は、","(コンマ)などで区切ってください。数値ではなく、テキストです。
  • datesToExclude 営業日としてカウントしない日付
複数設定する場合は、","(コンマ)などで区切ってください。テキストです。

戻り値は、営業日数です(Integerの数値型)。

試してみてください。
Function BusinessDays( startDate As String, endDate As String, daysToExclude As String, datesToExclude As String ) As Integer
    On Error GoTo ErrProc
    
    Dim startDT As NotesDateTime '基準日
    Dim endDT As NotesDateTime '終了日
    Dim wday As Integer '開始日の曜日
    Dim cnt As Integer '営業日数
    
    Set startDT = New NotesDateTime( startDate )
    Set endDT = New NotesDateTime( endDate )
    
    cnt = 0
    Do While startDT.DateOnly <= endDT.DateOnly wday = CStr( Weekday(startDT.DateOnly) )
        If InStr( daysToExclude, wday ) <> 0 Or InStr( datesToExclude, startDT.DateOnly ) <> 0 Then
        Else
            cnt = cnt + 1
        End If
        Call startDT.AdjustDay( 1 )
    Loop
    
    '戻り値を返す
    BusinessDays = cnt
    Exit Function
ErrProc:
    BusinessDays = -1
    Exit Function
End Function



【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: