- 締切済み
休みの日を数える
エクセル=Excelなどで、ある期間の土・日・休日の合計日数を数える方法はありますか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- zinchan
- ベストアンサー率49% (97/197)
#1さんの式中の「祭日テーブル」の定義方法について任意の期間に対応した祝祭休日の出し方について説明します。 以前に別質問で同様の説明をしましたが、改めて掲載させていただきます。参考になれば幸いです。 最初に、祝祭休日の表示方法についてご説明します。 エクセルでの祝日認識は、いつが祝日になるかを入力して認識させなければなりません。とても面倒です。 以下、祝日・振り替え休日、国民の休日に関するデータの入力方法について説明します。 とても長くなります。 法令による祝祭休日の定義は、平成15年より、1月1日、1月第2月曜、2月11日、春分日、4月29日、5月3日、5月5日、7月第3月曜、9月第3月曜、秋分日、10月第2月曜、11月3日、11月23日、12月23日です。 上記日付が日曜に該当する場合、元旦振替休日、成人の日振替休日、建国記念の日振替休日、春分の日振替休日、みどりの日振替休日、憲法記念日振替休日、こどもの日振替休日、海の日振替休日、敬老の日振替休日、秋分の日振替休日、体育の日振替休日、文化の日振替休日、勤労感謝の日振替休日、天皇誕生日振替休日が出てきます。 憲法記念日の翌日が火~金、秋分の日が第3週の水曜日である場合の前日の2つに該当すると、国民の休日が現れます。 さて、計算式です。期間始めと終わりの年月日を入力するシートがsheet1で、セルが仮にB3,B4にあるとします。 sheet2のA1セルに、 =year(sheet1!$B3)と関数式を入れます。期間開始日の西暦年が表示されます。 次に、sheet2のA8以降に、下記の式を入力してください。 最初に祝日の式です。順番に、 =DATE($A$1,1,1) =DATE($A$1,1,14-WEEKDAY(DATE($A$1,1,0),3)) =DATE($A$1,2,11) 春分の日は、その年で日付が異なるので、1851~2150年まで対応可能な簡易計算式を載せます。 =DATE($A$1,3,INT(IF(AND($A$1>=1851,$A$1<1900),19.8277,IF($A$1<1980,20.8357,IF($A$1<2100,20.8431,IF($A$1<2151,21.851,""))))+0.242194*($A$1-1980)-INT(($A$1-IF(AND($A$1>=1851,$A$1<1980),1983,IF($A$1<2151,1980,"")))/4))) =DATE($A$1,4,29) =DATE($A$1,5,3) =DATE($A$1,5,5) =DATE($A$1,7,21-WEEKDAY(DATE($A$1,7,0),3)) =DATE($A$1,9,21-WEEKDAY(DATE($A$1,9,0),3)) 秋分の日も、春分の日と同様の処理です。 =DATE($A$1,9,INT(IF(AND($A$1>=1851,$A$1<1900),22.2588,IF($A$1<1980,23.2588,IF($A$1<2100,23.2488,IF($A$1<2151,24.2488,""))))+0.242194*($A$1-1980)-INT(($A$1-IF(AND($A$1>=1851,$A$1<1980),1983,IF($A$1<2151,1980,"")))/4))) =DATE($A$1,10,14-WEEKDAY(DATE($A$1,10,0),3)) =DATE($A$1,11,3) =DATE($A$1,11,23) =DATE($A$1,12,23) 次に振り替え休日です。 =IF(WEEKDAY(A8)=1,A8+1,"") =IF(WEEKDAY(A9)=1,A9+1,"") =IF(WEEKDAY(A10)=1,A10+1,"") =IF(WEEKDAY(A11)=1,A11+1,"") =IF(WEEKDAY(A12)=1,A12+1,"") =IF(WEEKDAY(A13)=1,A13+1,"") =IF(WEEKDAY(A14)=1,A14+1,"") =IF(WEEKDAY(A15)=1,A15+1,"") =IF(WEEKDAY(A16)=1,A16+1,"") =IF(WEEKDAY(A17)=1,A17+1,"") =IF(WEEKDAY(A18)=1,A18+1,"") =IF(WEEKDAY(A19)=1,A19+1,"") =IF(WEEKDAY(A20)=1,A20+1,"") =IF(WEEKDAY(A21)=1,A21+1,"") 国民の休日です。 =IF(WEEKDAY(DATE($A$1,5,3),3)<5,DATE($A$1,5,4),"") =IF(WEEKDAY($A17,3)=2,$A17-1,"") 以上でその年の祝休日を表すことができました。翌年の祝休日は、上記各式を直下にコピーし、翌年の祝休日を表す式の$A$1に、+1をすることで対処できます。また、期間が長期にわたるときは、調べたい期間の最大年数分+1年分までコピーしておき、年次ごとに上記各式の$A$1を$A$1+1、$A$1+2、$A$1+3・・・とした式を入れておきます。+1年分は、年をまたぐ期間の祝休日を計数させるためです。 もし、これが職場の休暇日数を調べる等の目的であれば、会社の休業日、有給休暇なども入力しておく必要があります。 次に、A2セルに、=sheet1!$B4と入れておきます。 B列の、A列に対応する行のセル、例えばB6セルに、 =if(A6<=$A$2,A6,"")と入力し、それをA列の最下行に対応するB列の行までコピーします。 それらの一覧表の範囲に名前を付けます。例に従い"祭日テーブル"などと。 休日は増える可能性があるので、範囲は$B:$Bとしておきます。 範囲名の設定方法は説明しません。 sheet1の休み日数を表示したいセルに、求めたい休日合計値が表示されるはずです。
- elmclose
- ベストアンサー率31% (353/1104)
その期間の開始日と終了日とが、日付のシリアル値の形でセルに入っているとします。「networkdays」関数と計算式とを使って、 (終了日)-(開始日)+1- networkdays(開始日,終了日,祭日テーブル) これが土・日・休日の合計日数です。 祭日テーブルは、自分で定義します。