有村日記

日常感じたこと、気がついたこと、思ったことを記録

週の数え方〔ISO_8601〕

2010-09-23 20:46:31 | Weblog
 第何週か?を調べていたら、意外にISO規格があった。
 WikipediaISO 8601

 マイクロソフトExcel 2007 での週番号システムと日付/時刻表示の実装
 Excelでの式は、
=INT((A1-DATE(YEAR(A1-WEEKDAY(A1-1)+4),1,3)+WEEKDAY(DATE(YEAR(A1-WEEKDAY(A1-1)+4),1,3))+5)/7)

 (注)セルA1に日付データが入力されているものとする。


 角田桂一氏のページ(WEEKNUM関数とISO8601週番号)に詳しい解説がある。

日付が文字列(yyyymmdd)となっているデータを引数とする関数

2010-09-11 21:55:07 | Weblog
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