• ベストアンサー

EXCEL 日曜日の個数を数える

E1に「2004」、E2からE31にはその年の祝日・振替休日・国民の休日が数式により入っています。 E2からE31のうち、日曜日が何日あるかをE36に式で数えたいのですが、どういう式を書けばできますか? 作業列を使えば曜日を取り出してCOUNTIFでできるのはわかるのですが、F列以降にも別の年が入っていますので、今回は作業列は使えません。 また、VBAでユーザ関数を作るのも今回は事情がありできません。 配列数式(?)を使えば出来るのかなとも思うのですが、よくわかりません。 EXCEL2000です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.7

#1,3,6のmshr1962です。 >「アイテムの種類のカウント」 1/COUNTIF(範囲,範囲)の部分がポイントです。 あるアイテムが5個あるとしたら 1/COUNTIF(範囲,アイテム)=1/5 でこれが5個存在するので5倍されると1に戻ります。 つまりアイテム毎に個数/個数=1の計算になるので 結果が種類のカウントになります。

snoopy64
質問者

お礼

回答ありがとうございます。 な~るほど、すごいですね~ こういう発想は僕にはできそうも無いので、また何かありましたらお知恵をお貸しください。 ありがとうございましたヽ(^。^)ノ

その他の回答 (6)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.6

#1,3のmshr1962です。 SUMPRODUCTの解説ですが、この関数は配列の積の和を求めるものです。 配列に条件式を使った場合TRUEを1、FALSEを0として扱います。 =COUNTIF(A1:A100,1)=SUMPRODUCT((A1:A100=1)*1) =SUMIF(A1:A100,1,B1:B100)=SUMPRODUCT((A1:A100=1)*1,(B1:B100)) に置き換えることができます。 またCOUNTIF,SUMIFでは複数条件の場合に配列関数にするか、二つの数式の和・差にする必要がありますが SUMPRODUCTはそのまま使える利点があります。 また結果が数値か論理値の配列になれば複雑な条件でもカウント・集計が行えます。 上記でSUMPRODUCT内で"*1"しているのは論理値が単独の場合、数値にならないためです。 複数の配列の場合は"*"はAND条件、"+"はOR条件として計算できます。 例 りんごとみかんの集計 =SUMPRODUCT(((A1:A99="りんご")+(A1:A99="みかん"))*(B1:B99)) アイテムの種類のカウント(ただし範囲内にブランクがあるとエラー) =SUMPRODUCT(1/COUNTIF(A1:A99,A1:A99)) 特定の範囲のカウント(60以上80未満) =SUMPRODUCT((A1:A99>=60)*(A1:A99<80))

snoopy64
質問者

お礼

回答ありがとうございます。 SUMPRODUCTの解説と実例、とってもよくわかりました。勉強になります。 もう一つだけ、教えていただけませんか? 例の中の「アイテムの種類のカウント」なんですが、やってみたら確かにちゃんとカウントしてくるんですが、この式でなぜできるのかが理解できません(>_<) 何度も申し訳ありませんが、よろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

#4のお礼部分の、配列数式の「解説またはサイト紹介」 http://pc21.nikkeibp.co.jp/special/hr/ が良いでしょう。 件数カウントのパターンの要点は   IFを使って、 真の時1、偽のとき0に置き変える     偽  0  IF(A1=XX,1,0)     真  1  IF(A2=XX,1,0)     真  1  IF(A3=XX,1,0)     偽  0  IF(A4=XX,1,0)     真  1  IF(A5=XX,1,0)   +)真  1  IF(A6=XX,1,0)   -------        4 <--SUM   上の6行分のIF文は、配列数式では IF(A1:A6)=XXのように、( )と「:」を使って表現上で、1文に縮約される

snoopy64
質問者

お礼

回答ありがとうございます。 サイト見てきました。配列数式とSUMPRODUCTについて、実例をあげて、段階を踏んで、図をたくさん使って説明されていて、とても良くわかりました。 またわからないことが出ましたら教えてください(^o^)丿

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>数式により入っています これはどう言う意味ですか。式や数(日付シリアル値は、突き詰めると、数ですがそれは別にして)に引っかかります。日付なら分かります。 エクセルの規定路線の2004/9/20などと日付シリアル値ではいっているのですか? もしそうなら、配列数式で =SUM(IF(WEEKDAY(A1:A31)=1,1,0)) と入れて、SHIFT+CTRL+ENTERで出そうです。

snoopy64
質問者

お礼

回答ありがとうございます。 例えば元日(E2)のセルですと「=DATE(E$1,1,1)」という式が入っています。 教えていただいた式を「=SUM(IF(WEEKDAY(E$2:E$15)=1,1,0))」としましたら、ちゃんと出ました。 ありがとうございますヽ(^。^)ノ 前の方のお礼に書いた事と似ているのですが、配列数式についてもヘルプを見ても意味がいまいち理解できなかったので、もしよろしかったら解説またはサイト紹介していただけませんでしょうか。 よろしくお願いします。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.3

#1のmshr1962です。 >でも#VALUE!になってしまいます(>_<) E2:E31にあるのは文字列の日付ですか? "11月 3日"のようなものがある場合は#VALUE!になります。 "1月11日"は計算されますが年度は現在の年で計算されます。 下記の数式の場合はエラーしませんでした。(1部省略) 元旦=DATE(E$1,1,1) 成人の日=DATE(E$1,1,15-WEEKDAY(DATE(E$1,1,7),2)) 建国記念日=DATE(E$1,2,11) 春分の日=DATE(E$1,3,INT(0.24242*E$1-INT(E$1/4)+35.84)) ・(省略) 海の日=DATE(E$1,7,22-WEEKDAY(DATE(E$1,7,14),2)) 敬老の日=DATE(E$1,9,22-WEEKDAY(DATE(E$1,9,14),2)) 秋分の日=DATE(E$1,9,INT(0.24204*E$1-INT(E$1/4)+39.01)) 体育の日=DATE(E$1,10,15-WEEKDAY(DATE(E$1,10,7),2)) ・(省略) 振替休日=IF(WEEKDAY(直上のセル)=1,直上のセル+1,"") の様なら正常にカウントします。 この場合日曜と重なる可能性のあるのは春分・秋分・GW・文化・勤労感謝・天皇誕生日だけですが... #2の方へ#1の数式は配列数式ではありません。 SUMPRODUCT自体が配列を計算する関数です。

snoopy64
質問者

お礼

回答ありがとうございます。 E2:E31にあるのは、テストしていただいたのとほぼ同じ数式で出したもので、表示形式は「mm/ddaaa」としてはいますが、値としてはシリアル値です(よね?)。 E2:E15には元日から天皇誕生日まで、E16:E29には振替休日、E30:E31には国民の休日があります。 E16:E31は該当日が無い場合をIFで「""」にしているために、これを含んだために#VALUE!になったようです。 教えていただいた数式の範囲を「E$2:E$15」にしましたら、ちゃんとカウントしてくれました。 ありがとうございましたヽ(^。^)ノ ところで、難しい質問に対してSUMPRODUCTを使った見事な回答をなさっていらっしゃるのをよくお見かけしておりました。 僕も使いこなしたく、SUMPRODUCTのヘルプを見たのですが、いまいち意味が分からないのです。 もしよろしければ簡単な例など挙げて解説していただけませんでしょうか。 またはよくわかるサイトを紹介していただけませんか。 あつかましいですが、よろしくお願いいたします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1の補足ですが、 配列数式を入力するには、 該当の式を入力後 SHIFT+CTRL+ENTER で入力します。 (入力した式に{}がつきます)

snoopy64
質問者

お礼

回答ありがとうございます。 {}がつきましたが結果は#VALUE!のままです(>_<)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

E列に日にち(年月日)があるなら =SUMPRODUCT((WEEKDAY($E$2:$E$31)=1)*1) でカウントできます。

snoopy64
質問者

お礼

回答ありがとうございます。 でも#VALUE!になってしまいます(>_<)

関連するQ&A

  • EXCELで休日出勤を計算する

    お世話になります。 知恵をお貸しいただければ幸いです。 EXCELでひと月ごとのの出勤報告書を作っています。 そこで、休日(土、日、祝)出勤手当てを支払われる日が何日あるかを自動表示させようとしています。 今のシートの構成は A列:日付(2008/9/1の形で入力し、「1」のように表示 A5:A35) B列:曜日(A列から参照し、表示形式でaaaとし「月」のように表示) C列:休日(仕方なく手入力で「休」と入れている) D列:休日出勤したか判定(=IF(OR((C5>0)*(E5>0)),"休出","")C列とE列とも入力された場合に休日出勤とし「休出」と表示) E列:出勤した日はその日の仕事内容を入力 D列の最下部で「休出」が何回あるかカウント(=COUNTIF(D5:D35,"休出")) 祝日は関数が無いので、祝日一覧を作り該当する日付から祝日を割り出すのは分かったのですが。 =IF(WEEKDAY(A5)=1,"休","")&IF(WEEKDAY(A5)=7,"休","") よろしくお願いします。

  • エクセルで作る万年カレンダーで使う関数について(パート2)

    再び質問させて頂きます。エクセルで万年カレンダーを作ろうと、解説のホームページを見ているのですが、分からない部分があります。 〔表示例〕   2005/9/19 敬老の日   (      ) 国民の休日   2005/9/23 秋分の日   (      ) 振替休日 〔解説1〕 ※振替休日・・・ 日曜日と祝日が重なったとき ※国民の休日 ・・・祝日と祝日に挟まれた平日 ※振替休日と国民の休日が重なったときは、振替休日とする。 〔解説2〕 (敬老の日と秋分の日) 敬老の日が月曜日に固定されているので、秋分の日の曜日により国民の休日となる可能性があります。 (計算式) ・両祝日間が2日間であることから判定     =IF(B21-B19=2,B19+1,"") ・秋分の日が必ず水曜日になることから判定     =IF(WEEKDAY(B21)=4,B19+1,"") 解説の内容が、全体的にいまいち分かりません。(^^; 祝日同士が3日間の開きがあるのに、”国民の休日”が発生したりするのでしょうか? もしできたら、具体的にカレンダーの曜日まわりを含めて例を挙げて教えて頂けると助かります。 分かる方、ぜひよろしくお願いいたします。

  • 範囲内で同一セルの最大の個数の求め方(マクロ)

    たとえば配列数式で {=MAX(COUNTIF($B$2:$B$100,B2:B100))} のように範囲内で同一セルの最大個数を求めるのをVBAマクロでやりたいのです。 どのような記述になるのでしょうか?

  • エクセル関数教えてください

    以前このサイトで2106年まで祝日表示できる万年カレンダー作りでいろいろ質問させていただきました。また質問させてください。 今度は次の関数式を教えていただきたいのです。 (1)**/**の3営業日後 (2)**/**の3営業日前 (3)**/**~**/**の間で営業日は何日? (4)毎週が月曜日が会議で、月曜日に「会議」表示、月曜日休日のときは火曜日に表示 A列に西暦入り日付 B列に曜日 C列に祝日表示 D列に「営業日」→1、「休日」→0、大型連休前後の特別休暇になりそうな平日を「未定」→9のコード表示 N列から祝日表があります。 N       M    O    P    Q        2006  2007  2008・・・ 元旦 振替休日 成人の日 建国記念日 振替休日 (1)~(4)はD列コード9があったらエラー表示にする条件があります。 (1)と(2)はWORKDAY関数(3)はNETWORKDAYS関数かなと思うのですが 祝日表の反映のしかたがわかりません。祝日表の日にち部分を全選択して名前の定義で名前を付けてやってみたのですがエラーがでてしまいます。。教えください それで祝日表の反映のしかたがわからないのでとりあえず1年分をセルH1~H25に祝日日を表示 =IF(D1=9,"エラー",WORKDAY(A1,3,$H4$1:$H$25)) と入れるとD列に9が入っているところはエラー表示するのですが結果(返り値?)がコード9の日にちが出てしまう箇所があります。これを訂正する方法はありますか? (4)ですが私が考えた計算式 =IF(B5="月","会議",IF(AND(B4="月",C4<>""),"会議",IF(AND(D5=9,B5="月"),"未定",""))) と入れると月曜祝日のとき、月、火と「会議」って出てしまいます添削おねがいします。 長々と書きましたがご存知の方がいらっしゃいましたらぜひ助けてください!よろしくおねがいします。。

  • Excelの関数を教えてください。

    下記のようなことができる関数式があれば教えてください。 Excelカレンダーは作成済みで祝日リストで色づけも終わっています。 月曜日と金曜日に、それぞれ週1でやる業務があります。 月曜日にA. 金曜日にBが自動で入るがそれぞれの曜日が祝日だったら空白にするまではできたんです。 知りたいのは、『基本月曜日にAをいれるけど“月曜日が祝日だったら週明けに”A』と入れたいんです。 ちなみに今は =IF(COUNTIF(祝日リスト.$A3)=1,"",IF($B3=2,業務A,IF(B3=6,業務B,""))) とif式を重ねています。(B列にはWEEKDAY関数を適用してありますので、2が月曜日、6が金曜日のため上記の式になります)

  • EXCELで入力された式の値を求めて自動計算

    A B C D E 1|データNO |数値1| 数値2| 数値3| 2| 1| 0.3 | 0.2 | 0.5 | 3| 2| 0.3 | 0.2 | 0.5 | 4| 3| 0.3 | 0.2 | 0.5 | -------------------------------------------- 10| 2/1| 数式1| 数式2 | 数式3 | 11| 3/2| 数式4| 数式5 | 数式6 | 12| 【求めたい値】 数式1には=C3/C2、数式2には=D3/D2、数式3には=E3/E2 数式4には=C4/C3、数式2には=D4/D3、数式3には=E4/E3 B列の2/1というのをそのまま式にしたいです。 2/1、3/2などは規則性はありません。その都度変わります。 C列の式ではC列の値を、D列の式ではD列の値を用います。 関数で=MATCH(LEFT(D34,SEARCH("/",D34,1)-1),D1:D23,0))と入れ、C3の値を求めようと思いましたが この時点でエラーになりました。=MATCH(2,D1:D23,0)だと大丈夫なのですが・・・。 関数でやるととても式が長くなりそうなので、VBAの方が良いかとも思っています。 どのようにコード、もしくは式を書けば希望の値が得られるでしょうか? VBAの場合は2/1などの数値を入れた時点で自動計算できれば嬉しいです。 よろしくお願いします。

  • エクセルで、日曜日の表示を赤とする方法

    エクセル2002を使用しています。 縦行に年月日と曜日を表示させていますが 日曜日毎だけを赤文字にしたいのですが 自動的(数式でも可)で曜日を赤文字表示にするにはどうしたら よいでしょうか いままでは1週間分の日にちと曜日を縦に作り 日曜日を書式メニューのフォント欄で赤文字してする。 それをオートフィルを利用して転写(?)していました。 現在は年、月、日と別々の行を使用しているため オートフィルが旨くいかないケースが目立ち今回の疑問に遭遇しています。 IF関数でも結構ですし、数式があれば一番よいのですが 書式の関数などあるのか?とも思っています。 よろしくお願いします

  • Excel 条件に従い自動的に文字入力するには

    よろしくお願いします。 A列に1年分の日付、 B列に休日(国民の祝日("元旦"や"成人の日"など)と"夏季休暇"と"年末年始休暇"が文字列で)が入力されています。 C列に自動的に"休日"と"休暇"が入るようにしたいのですが、 そのルールとして 木曜日と日曜日と国民の祝日を"休日"にし、 夏季休暇と年末年始休暇を"休暇"にしたいのです。 C列にはどのような数式を入れればいいでしょうか。

  • Excel 条件付き書式 指定日以降 白抜き

    タテにメンバー氏名、ヨコに11日から翌月10日までの勤務表作成にて 開始日更新に合わせて翌月11日以降を日付/曜日とも、白抜きにしたいのですが? 表部分 : A3~AH9 【A+B列には氏名】 【日付表示行 C3~AH3 ユーザー定義書式 : d】 C3に 2017/1/11 D3に=C3+1 これをAHまでオートフィル 【曜日表示行 C4~AH4 ユーザー定義書式 : aaa】 C4に=C3 これをAHまでオートフィル ◆日付/曜日セル色づけ 条件付き書式 C3~AH4 祝日 : 数式 =COUNTIF(祝日,C$3)           ※別シートに「祝日」の日付を書き込んだデータ作成にて C3~AH4 日曜 : 数式 =WEEKDAY(C$3)=1 C3~AH4 土曜 : 数式 =WEEKDAY(C$3)=7 上記方法にて、C3に今月度の開始日を入れるとC3~AH4に 自動で日付と曜日の表示、色付けがされるようにしてあるのですが このC3更新に合わせて翌月11日以降が白抜きになる方法を教えてもらえませんか? ※添付画像の黒枠部分を月更新にて自動で白抜きにさせたいのですが? ・・・よろしくお願い致します。

  • エクセルで万年暦作り(祝日)・・・長文です・・続き

    何度もすみません。 教えてgooのおかげでカレンダーが大体完成してきたのですがまた行き詰ってしまいました。 上司の指示も入り A列に西暦/月/日(セルの設定yyyy/mm/dd)(西暦と月と日を別セルにしたらダメと言われました。dateじゃなくてただの数字になるから??) B列に曜日  =TEXT(A2,"aaa") C列に祝日 D列にコード(休みは01、出勤は11、GWやお盆などの特別休暇になりそうな未定は99) F列に祝日の日にち(西暦2006年が入ってます)(春分、秋分、第○月曜は関数式で求めました) G列に元旦とか成人の日などの祝日名 H列に祝日の日にちと未定コードの日にち(西暦入り) I列にコード番号。祝日に01、未定日に99(セルで文字列設定) FG列は祭日一覧、HI列にコード一覧と名前をつけました(A列の真上のところ) です。 C列にいろいろ調べて関数 =IF(AND(C1<>"",B1="日"),"振替休日",IF(ISERROR(VLOOKUP(A2,祭日一覧,2,0)),"",VLOOKUP(A2,祭日一覧,2,0))) で祝日と振り替え休日が出たのですが 国民の祝日の関数がどうしてもできません 国民の祝日は9月の敬老の日と秋分の日の1箇所だけなので 「もし秋分の日が9月第三水曜日なら前日に国民の祝日としてそうでないときは空白」って関数式かなと考えたのですが・・・=IF( ,"国民の祝日","")とゆう簡単なところしかできていないのでわかる人がいたらどうぞ教えてくださいよろしくお願いします。 あと2つほど質問したいのですがかなり長文になってしまいましたのでまた質問させていただきますがどうぞ皆様よろしくお願いします。

専門家に質問してみよう