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

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 件のコメント: