Excelの関数には、曜日を判定できる関数(WEEKDAY)が用意されている。また、表示だけなら書式設定でもできる。しかし祝日となると、関数も何も、用意されていない。
祝日は年により、突然増えたり、「来年からは第〇週目に変更」などとなったりするので、対応が難しいのであろう。
それでも何か方法がないかと「excel 祝日」などでGoogle検索すると、Google Calendar API を利用する方法がトップに出てくる。
見つけた時はうれしかったが、よくよくページを見てみると、コードが恐ろしく長く、また随所に使いにくい部分が出てくる。
さらに簡単な方法がないか探して、やっと見つけた、サンプルサイトが、以下。
上記のサイトでは、祝日判定のWebAPIを提供している。
ブラウザのURLに、http://s-proj.com/utils/checkHoliday.php?kind=h&date=20170503 をコピペしてEnterキーを押すと動きが分かるが、末尾の8桁の数字でもって祝日かそうでないかが、シンプルかつエレガントに分かるようになっている。
その仕組みを使わせていただいて、ExcelVBAに取り込んでみたのが、こちら。Accessでも使える。
実際に使う際は、Debug.Printしている部分を、セルに入れたり、テキストボックスに代入したり、することになろう。
Sub httpRequest() ' 祝日判定 ' 国民の祝日チェック <http://s-proj.com/utils/holiday.html> Dim HttpReq As MSXML2.XMLHTTP60 Dim DomDoc As MSXML2.DOMDocument60 Dim targetURL As String targetURI = "http://s-proj.com/utils/checkHoliday.php?kind=h&date=20170503" '20170503部分を任意の数値に 'HTTP GET Set HttpReq = CreateObject("MSXML2.XMLHTTP") HttpReq.Open "GET", targetURI, False HttpReq.send (Null) Set DomDoc = CreateObject("MSXML2.DOMDocument.6.0") DomDoc.LoadXML (HttpReq.responseText) Debug.Print HttpReq.responseText Set HttpReq = Nothing Set DomDoc = Nothing End Sub
いいものが見つかって、うれしい。
作者さん、ありがとうございます。