Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


60670 / 76738 ←次へ | 前へ→

【20705】Re:任意の日付が休日かを判断し、休日の場合は前日に繰り上げるには
回答  かみちゃん  - 04/12/15(水) 23:36 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>1.まず任意の日付を指定します。
>2.その日から指定した日数だけさかのぼり、その日が営業日であるかを判断。
>3.もしその日が休業日であれば、営業日になるまで1日ずつ繰り上げる。

以下のURLにある「祝日判定関数」ktHolidayNameを利用して、祝日を判定する
ものとした場合、以下のコードで実現できます。
http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm

Option Explicit

Public Function GetBeforDay(ByVal TargetDate As Date, DayCount As Integer) As Date
 Dim c As Range
 
 TargetDate = TargetDate - DayCount
  
 '求める日付が確定するまで繰り返す(無限ループ)
 Do While True
  '祝祭日でない場合
  'ktHolidayName関数を利用
  '参考URL http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm
  If ktHolidayName(TargetDate) = "" Then
   '土曜日日曜日以外の場合
   If Weekday(TargetDate) <> 1 And Weekday(TargetDate) <> 7 Then
    '独自休業日の検索 … A列に設定してある場合
    'A列の書式設定は、yyyy/m/dにしてあるものとする。
    With Columns("A")
     Set c = .Find(Format(TargetDate, "yyyy/m/d"), LookIn:=xlValues)
     '独自休業日が設定してある場合
     If c Is Nothing Then
      'TargetDateの繰上がりを終了する … 求めるTargetDateの確定
      Exit Do
     End If
    End With
   End If
  End If

  '日付を1日繰り上げる
  TargetDate = TargetDate - 1
 Loop
 
 GetBeforDay = TargetDate
End Function

あとは、=GetBeforDay("2004/12/25",2)
で、2004/12/22が取得できます。
(動作確認済みです)

0 hits

【20698】任意の日付が休日かを判断し、休日の場合は前日に繰り上げるには きどっち 04/12/15(水) 18:34 質問
【20703】Re:任意の日付が休日かを判断し、休日の場... [名前なし] 04/12/15(水) 23:09 回答
【20707】Re:任意の日付が休日かを判断し、休日の場... [名前なし] 04/12/16(木) 0:20 発言
【20705】Re:任意の日付が休日かを判断し、休日の場... かみちゃん 04/12/15(水) 23:36 回答
【20706】Re:任意の日付が休日かを判断し、休日の場... 角田 04/12/15(水) 23:37 回答
【20709】Re:任意の日付が休日かを判断し、休日の場... きどっち 04/12/16(木) 2:35 お礼

60670 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free