この人頭いいなと思ったエピソード

祝日と土曜、日曜の合計をカウントしたいです。

Excelで祝日シートを作成しております。
別シートのad5セルにはリストで年が選択できるようになっています。
ad6には同様に月がリストで選択可能です。

例えばad5セルで2024、ad6セルで7を選択した場合、2024年7月の土曜、日曜、祝日の合計がでるようにしたく、以下の計算式を入れました。

=SUMPRODUCT(--(WEEKDAY(DATE(AD5, AD6, ROW(INDIRECT("1:" & DAY(EOMONTH(DATE(AD5, AD6, 1), 0))))))=7)) + SUMPRODUCT(--(WEEKDAY(DATE(AD5, AD6, ROW(INDIRECT("1:" & DAY(EOMONTH(DATE(AD5, AD6, 1), 0))))))=1)) + COUNTIFS(祝日リスト!$A$2:$A$536, ">=" & DATE(AD5, AD6, 1), 祝日リスト!$A$2:$A$536, "<=" & EOMONTH(DATE(AD5, AD6, 1), 0), 祝日リスト!$A$2:$A$536, "<>" & TEXT(WEEKDAY(DATE(AD5, AD6, ROW(INDIRECT("1:" & DAY(EOMONTH(DATE(AD5, AD6, 1), 0)))))), "ddd"))

結果としては、2024年7月は土曜、日曜に祝日がないため9となります。

しかし、土曜、日曜に祝日の場合、土曜、日曜の個数と祝日を2日分としてしまいます。

土曜、日曜に祝日の場合は1日としてカウントするには、上記の式をどのように修正するのが良いでしょうか。

A 回答 (3件)

こんにちは



どういう計算方法を取っているのかについて何ら説明がありませんが、とても解読する気にはならない式なので、文章にある事象だけからですが・・

>しかし、土曜、日曜に祝日の場合、土曜、日曜の個数と祝日を
>2日分としてしまいます。
単純に、土日の数と祝日の数を加算して計算していませんか?

ご質問のケースなら、
 『ある日が土日または祝日ならカウント、それ以外ならカウントしない』
というロジックで計算すれば良いのではないでしょうか?
多分、AND と OR のロジックを整理できていないのではないかと推測します。


>土曜、日曜に祝日の場合は1日としてカウントするには、
>上記の式をどのように修正するのが良いでしょうか。
残念ながら、上記の理由で、とても修正する気にはなりません。

SUMPRODUCT関数を利用して計算したいのなら・・
「祝日リスト」がどのような形式になっているのかも不明ですが、仮に「振替休日」がリストに含まれているとしてよいのなら、以下で算出可能と思います。
(考え方は、前述の通りです)
=SUMPRODUCT((((WEEKDAY(ROW(OFFSET($A$1,DATE(AD5,AD6,0),,DAY(DATE(AD5,AD6+1,0)))),11)>5)+COUNTIF(祝日リスト,ROW(OFFSET($A$1,DATE(AD5,AD6,0),,DAY(DATE(AD5,AD6+1,0))))))>0)*1)

ちなみに、No1様も回答なさっている NETWORKDAYS関数を利用すれば、同じ結果をもっと簡単に求められますし、式の視認性も良くなると思います。
=DAY(DATE(AD5,AD6+1,0))-NETWORKDAYS(DATE(AD5,AD6,1),DATE(AD5,AD6+1,0),祝日リスト)

※「振替休日」がリストに含まれていない場合は、「振替休日」の分(=祝日が日曜日のケース)を加算する必要があります。
    • good
    • 0

「途中経過時の見え方に違和感」が、何に対してなのかが定かで


ないので、別方法に抵抗があるのでしょうか?

別方法なら、振替休日などの祝日データが正しければ、問題なく
取得できるかと思います。
添付画像だと3行目だけ非表示にしていますが、問題なく日数を
出しています。
 =DAY(EOMONTH(B$3,0))-NETWORKDAYS(B$3,EOMONTH(B$3,0),Sheet2!$A$2:$A$41)
(年の部分は、来年分は修正してあります)

2025年2月の場合なら、振替休日と28日の月末を考慮しても、
10日が取得できているので、問題なく動作しているかと。
「祝日と土曜、日曜の合計をカウントしたいで」の回答画像2
    • good
    • 0
この回答へのお礼

返信遅くなりました。
代替案までご提示して下さりありがとうございます。

フォーマットの作りから見直して想定した通りのものになりました。

お礼日時:2024/07/11 18:31

面倒な方法で計算されていますね。


修正するより別方法を検討しては。

土日祝日を数えのではなく、期間内の日数を求めてから、期間内の
営業日(稼働日)を数えて引いたらどうですか。
指定月の日数:EOMONTH関数とDAY関数
https://h1r0-style.net/excelvba/get-days-of-month/
稼働日数:NETWORKDAYS関数
https://tokusengai.com/_ct/17550247

ちなみに、以前の質問は解決されたのですか?
https://oshiete.goo.ne.jp/qa/13849637.html
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

仰るとおり当初は営業数でけんとうしていたのですが、途中経過時の見え方に違和感があり、今回の方法を考えてました。

別質問の方について回答できておらず、失礼いたしました。

Windows10でもストアなどからペイントのバージョンアップが可能という記事をみたので、後ほど試そうと考えており後回しにしておりました。

結論としては、貴方にご回答いただいた案が元々想定していた答えだった為、このあとクローズします!

お礼日時:2024/07/01 13:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A