- ベストアンサー
エクセル 週ごとの日数が出したい。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
回答No.4です。 済みません、「2014年3月」等の様に、年月が入力されているセルとして参照しているセルが、回答No.4の関数においてはC2セルではなく、C3セルになっておりました。 後それから、C2セルに入力されている関数が、例えば、 =DATE(2014,3,2) 等の様に、その月の"1日以外の日付"を返す様なものとなっていた場合(表示だけは「2014年3月」のままになります)には、誤った日数を返してしまう事に、後から気付きました。 ですから、第1、第5、第6週の日付を求める関数を次の様に改良致しました。(第2週目、第3週目、第4週目の日数を求める関数に関しては変更する必要は御座いません) 【第1週目の日数を求める関数】 =IF(ISNUMBER(1/DAY($C$2)),7-WEEKDAY(TEXT($C$2,"yyyy/m"),3),"") 【第5週目の日数を求める関数】 =IF(ISNUMBER(1/DAY($C$2)/(TEXT($C$2,"yyyy/m/")&29-WEEKDAY(TEXT($C$2,"yyyy/m"),3))),MIN(7,DATE(YEAR($C$2),MONTH($C$2)+1,1)-DATE(YEAR($C$2),MONTH($C$2),29-WEEKDAY(TEXT($C$2,"yyyy/m"),3))),"") 【第6週目の日数を求める関数】 =IF(ISNUMBER(1/DAY($C$2)/(TEXT($C$2,"yyyy/m/")&36-WEEKDAY(TEXT($C$2,"yyyy/m"),3))),MIN(7,DATE(YEAR($C$2),MONTH($C$2)+1,1)-DATE(YEAR($C$2),MONTH($C$2),36-WEEKDAY(TEXT($C$2,"yyyy/m"),3))),"") 因みに、私の方法と、回答No.2様の方法の場合は、C2セルに年と月を指定する値が入力されてさえいれば、各週の日付をそれぞれ独立して求める事が出来ますので、質問者様の添付画像の例に写っている様な、B列の「日付」欄やC列の「曜日」欄等の、補助列は必要御座いません。 尚、私の方法では、存在しない週の所には何も表示されない様になっております。
その他の回答 (6)
- bunjii
- ベストアンサー率43% (3589/8249)
添付の画像を無視させて頂きます。 >月曜から日曜までを1週とする場合の週毎の日数が知りたいです。 C2セルに月の初日が入力されていることを条件とします。 第1週の日数はその月の8日から初日のWEEKDAY関数からの返り値を差し引けば良いでしょう。 E5=8-WEEKDAY($C$2,2) 第2週から第4週は7日の固定となります。 第5週以降は次の式で算出できます。 質問の例では第6週まであります。 E9=IF(SUM(E$5:E8,7)<DAY(EOMONTH($C$2,0)),7,IF(SUM(E$5:E8)=DAY(EOMONTH($C$2,0)),"",WEEKDAY(EOMONTH($C$2,0),2))) Excel 2013で検証しましたがExcel 2007でも同様に算出できると思います。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! すでに色々回答は出ていますので、参考程度で・・・ 作業用の列を使う方法です。 すでに数式をお考えのようですので、余計なお世話かもしれませんが、 ↓の画像で B5(セルの表示形式はユーザー定義から d としています)に =IF(MONTH(C$2+ROW(A1)-1)=MONTH(C$2),C$2+ROW(A1)-1,"") C5セルに =IF(B5="","",TEXT(B5,"aaa")) という数式を入れ、B5・C5を範囲指定 → C5セルのフィルハンドルで31日までの35行目までオートフィルでコピー! 作業列のG4セルには単に =ROW() G5セルに =IF(OR(B5=EOMONTH(C$2,0),C5="日"),ROW(),"") という数式を入れ35行目までコピーしておきます。 最後にE5セルに =IFERROR(SMALL(G:G,ROW(A2))-SMALL(G:G,ROW(A1)),"") という数式を入れオートフィルで下へコピー! これで画像のような感じになります。m(_ _)m
- kagakusuki
- ベストアンサー率51% (2610/5101)
第1週目の日数を求める関数の一例は =IF(ISNUMBER(1/DAY($C$3)),7-WEEKDAY($C$3,3),"") です。 第2週目、第3週目、第4週目の日数を求める関数一例は =IF(ISNUMBER(1/DAY($C$3)),7,"") です。 第5週目の日数を求める関数一例は =IF(ISNUMBER(1/DAY($C$3)/(TEXT($C$3,"yyyy/m/")&29-WEEKDAY($C$3,3))),MIN(7,DATE(YEAR($C$3),MONTH($C$3)+1,1)-DATE(YEAR($C$3),MONTH($C$3),29-WEEKDAY($C$3,3))),"") です。 第6週目の日数を求める関数一例は =IF(ISNUMBER(1/DAY($C$3)/(TEXT($C$3,"yyyy/m/")&36-WEEKDAY($C$3,3))),MIN(7,DATE(YEAR($C$3),MONTH($C$3)+1,1)-DATE(YEAR($C$3),MONTH($C$3),36-WEEKDAY($C$3,3))),"") です。
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
追記。 ANo.1の回答の方が簡単ですが、ANo.1の回答は、1~3週目の日数が判らないと4週目の日数が判らない、1~4週目の日数が判らないと5週目の日数が判らない、1~5週目の日数が判らないと6週目の日数が判らないので、単独では計算できません。 当方の回答は複雑ですが、その代わり、それぞれを単独で計算できます。 あとANo.1の回答は「4週目の日数」を計算してますが、4週目の日数は「常に7日」なので計算する必要はありません。 一応、2010年1月~2037年12月の28年分で検証しましたが、どちらも答えが一致しました(曜日と日付の組み合わせは28年周期で循環するので28年分だけ試せばよい)
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
1週目は =MOD(8-WEEKDAY(TEXT(C2,"yyyy/mm/")&"01"),7)+1 の式で計算できます。 2~4週目は「7」で固定です。 問題は、5、6週目。月によって、4週しかなかったり、5週しか無かったり、6週あったりします。 その月が何週あるのかは「末日の週番号から初日の週番号を引く」事により求められます。 最後の週(5週目か6週目のどちらか)は「翌月の初日の曜日」から計算できます。 5週目は =CHOOSE(WEEKNUM(TEXT(DATE(YEAR(C2),MONTH(C2)+1,1)-1,"yyyy/mm/dd"),2)-WEEKNUM(TEXT(C2,"yyyy/mm/")&"01",2)-2,0,MOD(WEEKDAY(TEXT(DATE(YEAR(C2),MONTH(C2)+1,1),"yyyy/mm/dd"))+4,7)+1,7) の式で計算できます。 6週目は =IF(WEEKNUM(TEXT(DATE(YEAR(C2),MONTH(C2)+1,1)-1,"yyyy/mm/dd"),2)-WEEKNUM(TEXT(C2,"yyyy/mm/")&"01",2)<>5,0,MOD(WEEKDAY(TEXT(DATE(YEAR(C2),MONTH(C2)+1,1),"yyyy/mm/dd"))+4,7)+1) の式で計算できます。 なお「5週目が無い(4週しかない)」や「6週目が無い(5週しかない)」と言う場合、存在しない週は「0」になります。
- mshr1962
- ベストアンサー率39% (7417/18945)
当月1,2日が日曜の場合、第6週がある可能性もあります。 E5=8-WEEKDAY(DATE(YEAR($C$2),MONTH($C$2),0)) E6=7 E7=7 E8=MIN(DAY(DATE(YEAR($C$2),MONTH($C$2)+1,0))-SUM(E5:E7),7) E9=MIN(DAY(DATE(YEAR($C$2),MONTH($C$2)+1,0))-SUM(E5:E8),7) E10=MAX(DAY(DATE(YEAR($C$2),MONTH($C$2)+1,0))-SUM(E5:E9),0)
お礼
ありがとうございます! 分かりやすい説明で助かりました!