1 目的
日付が文字列(yyyymmdd)となっているデータを引数とし、日付型に変換し、何らかの処理結果を返す関数を作成する。
2 ポイント
CDate(Format(引数 as String, "@@@@/@@/@@")) これにより引数を日付型に変換できる。
3 事例
国民の祝日に関する法律(昭和23年法律第178号)を考慮し、特定の日付(文字型yyyymmdd)が祝日の場合、"祝"を変えし、振替休日の場合、"振"を返し、それ以外は"平"(平日の意)を返す関数は次のとおり。
なお、ktHolidayName()関数は参考サイト
AddinBox(祝日マクロ-1)による。
Public Function AriYoubi(ByVal strDate As String) As String
'引数strDate(yyyymmdd)はString型
Dim tmpDate As Date
Dim tmpYoubi As String
tmpDate = CDate(Format(strDate, "@@@@/@@/@@"))
tmpYoubi = ktHolidayName(tmpDate)
If tmpYoubi = "" Then
Select Case Weekday(tmpDate)
Case 1
AriYoubi = "日"
Case 2 To 6
AriYoubi = "平"
Case 7
AriYoubi = "土"
End Select
Else
AriYoubi = IIf(tmpYoubi <> "振替休日", "祝", "振")
End If
End Function
〔参考〕
http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm
http://www.ken3.org/vba/backno/vba072.html
平成22年9月22日追加。
Public Function previousBusinessDate() As Date
'本日よりn営業日前の営業日を返す関数。
Dim tempDate As Date '求める営業日
Dim prevBD As Integer '遡及する日数
Dim i As Integer '遡及日のカウンタ
tempDate = Date '今日の日付をセット
prevBD = 5 '遡及する日数:(例)n営業日前ならn
i = 0
While i <prevBD
i = i + 1
Else
i = i
End If
tempDate = DateSerial(Year(tempDate), Month(tempDate), Day(tempDate) - 1)
Wend
previousBusinessDate = tempDate
End Function