- 締切済み
日曜日と祝日の除いた日付差をカウントしたい
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答No.3です。 前回の私の回答にある関数を、もう少し簡略化出来る事に気づきました。 M2セルに入力する関数は次の様になります。 =IF(ISNUMBER(1/DAY($F2)/DAY($L2)),(ROUNDUP((ABS($L2-$F2)+1)*6/7,0)-OR(WEEKDAY(MIN($F2,$L2))>WEEKDAY(MAX($F2,$L2)),WEEKDAY(MIN($F2,$L2))=1)*(WEEKDAY(MIN($F2,$L2)-1)<>WEEKDAY(MAX($F2,$L2)))-COUNTIFS($O:$O,">="&MIN($F2,$L2),$O:$O,"<="&MAX($F2,$L2)))*SIGN($L2-$F2),"")
- bunjii
- ベストアンサー率43% (3589/8249)
回答No.1の訂正です。 前回の回答では土曜日と祝祭日がダブったときに誤差が生じますので補正が必要です。 2014/5/3が土曜日のため範囲に含ませるときの処理が必要でした。 下記のように加算し過ぎた日数を減算します。 重複分=SUMPRODUCT((P$2:P$20>=F5)*(P$2:P$20<=L5)*(WEEKDAY(P$2:P$20)=7)) =NETWORKDAYS(F5,L5,$P$2:$P$20)+INT((L5-F5+WEEKDAY(F5,1))/7)-SUMPRODUCT((P$2:P$20>=F5)*(P$2:P$20<=L5)*(WEEKDAY(P$2:P$20)=7))
- kagakusuki
- ベストアンサー率51% (2610/5101)
祝日のリストが何列目に作成されているのかという事が、御質問文中では説明されておりませんので、取り敢えず、祝日のリストが作成されている列はO列であるものとして回答させて頂きます。 又、開始日や終了日が何行目から入力されているのかという事も、、御質問文中では説明されておりませんので、取り敢えずの話として、開始日が入力されているセルがF2セルで、終了日が入力されているセルがL2セルである場合に関して回答させて頂きます。 上記の場合、M2セルには次の様な関数を入力されると良いと思います。(他にも色々なやり方がある筈です) =IF(ISNUMBER(1/DAY($F2)/DAY($L2)),(MAX($F2,$L2)-MIN($F2,$L2)+1-INT((MAX($F2,$L2)-MIN($F2,$L2)+1)/7)-OR(WEEKDAY(MIN($F2,$L2))>WEEKDAY(MAX($F2,$L2)),WEEKDAY(MIN($F2,$L2))=1)*(WEEKDAY(MIN($F2,$L2)-1)<>WEEKDAY(MAX($F2,$L2)))-COUNTIFS($O:$O,">="&MIN($F2,$L2),$O:$O,"<="&MAX($F2,$L2)))*SIGN($L2-$F2),"")
- MackyNo1
- ベストアンサー率53% (1521/2850)
土曜日が祝日の時は単純に土曜日の数をカウントするだけでは正しい値を返しませんので、自分で関数を作成する必要があります(+-100日までの数式)。 例えば、開始日が必ず終了日よりも前の時は以下のような数式になります。 =SUMPRODUCT((WEEKDAY(開始日+ROW($A$1:$A$100)-1)<>1)*(COUNTIF(祝日リスト,開始日+ROW($A$1:$A$100)-1)=0)*(開始日+ROW($A$1:$A$100)-1<=終了日)) 開始日が終了日よりも小さい時も計算できるようにするには「開始日」の部分を「MIN(開始日,終了日)」に変更し、終了日の部分を「MAX(開始日,終了日」にして、数式の先頭にSIGN関数を追加してください。 =SIGN(終了日-開始日)*SUMPRODUCT((WEEKDAY(MIN(開始日,終了日)+ROW($A$1:$A$100)-1)<>1)*(COUNTIF(祝日リスト,MIN(開始日,終了日)+ROW($A$1:$A$100)-1)=0)*(MIN(開始日,終了日)+ROW($A$1:$A$100)-1<=MAX(開始日,終了日)))
- bunjii
- ベストアンサー率43% (3589/8249)
>開始日と終了日の日曜日と祝日を除いた日付差を算出したいと考えていますが、日付差の算出ができませんので、どなたか教えてください NETWORKDAY関数では土日祝を引いた日数のため不都合となれば土曜日の数を加算することで解決します。 土曜日の数=INT((L2-F2+WEEKDAY(F2,1))/7) =NETWORKDAYS(F2,L2,P2:P20)+INT((L2-F2+WEEKDAY(F2,1))/7) >※開始日の方が大きい場合があります その時は負の値となりますのでIF関数で空欄にすべきと思います。 =IF(F2>L2,"",NETWORKDAYS(F2,L2,P2:P20)+INT((L2-F2+WEEKDAY(F2,1))/7))