• ベストアンサー

期間と条件を指定してカウントする関数。

下記の図でG4~I6に入る関数を教えて下さい。 ピボットテーブルを試しましたがよく分からず、COUNTIFS関数を使用しましたが 日付の入力の仕方がいまいちわかりません。 試しにG4に入力した関数は以下の通りです。 =COUNTIFS(D:D,"○○",C:C,8/16:8/21) この8/16~8/21という指定の仕方がわかりません。 どういう関数を入れればカウントできますでしょうか? あと出来ればこのフォームを使い回したいので表のG3~I3の数字を変えるだけで カウント出来るようにしたいのですが可能でしょうか? 宜しくお願いします。

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.4

回答No.1の数式に一部誤りがありましたので訂正します。 G4=COUNTIFS($D:$D,F4,C:C,">="&LEFT(G$3,FIND("~",G$3)-1)*1,$C:$C,"<="&MID(G$3,FIND("~",G$3)+1,LEN(G$3))*1)    ↓ G4=COUNTIFS($D:$D,$F4,$C:$C,">="&LEFT(G$3,FIND("~",G$3)-1)*1,$C:$C,"<="&MID(G$3,FIND("~",G$3)+1,LEN(G$3))*1) 数式中のC:Cを$C:$Cに、F4を$F4に修正しました。 誤りの内容はセルの指定で$が不足しているため右にコピーしたとき検索条件範囲が移動してしまうことです。 検証時にはH3セルとI3セルの範囲に入るデータが存在しなかったのでチェック漏れになりました。 あなたの検証で全てが0と表示されることとは異なるチェックミスです。

purikopuriko
質問者

お礼

文字列でカウントされていませんでした^^ ありがとうございます^^

その他の回答 (3)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.3

>そこは○○、××、△△に変更致しましたが0のままなのです…。 他の原因としてはC列の日付が文字列になっているときは条件に合致する値を見つけられないので計数の結果は0になります。 検索条件が文字列のときは"8/18">="8/16"と言う論理式は成り立ちません。 従って、C列の日付が文字列のときはシリアル値に置換してください。 文字列をシリアル値に変換する数式は次の通りです。 =VALUE(C3) → VALUE("8/16") → 41867 もう1つ考えられる原因はG3、H3、I3の各セルに入力の文字列が質問の貼付画像と異なる場合は検索条件の日付を取り出せないことになりますので検索条件に合致する値を見つけられません。 従って、計数の結果が0になるでしょう。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

>そうするとG4からI6まで全て0という表記になってしまうんですがこの関数をどこかいじらなければならない んでしょうか?? 関数ではなくF列とD列の比較対象関係を見直してください。 D列の条件はF列にしましたのであなたが提示した画像ではF4に"○"、F5に"×"、F6に"△"としてありますのでそれを"○○"、"××"、"△△"のように変更しないと該当が見つかりませんので結果が0になるでしょう。

purikopuriko
質問者

お礼

そこは○○、××、△△に変更致しましたが0のままなのです…。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.1

>この8/16~8/21という指定の仕方がわかりません。 >どういう関数を入れればカウントできますでしょうか? F列には販社の名前を入力してあるものとします。 作業日の期間を3行目のG列から右に提示のような書き方のときで参照します。 G4=COUNTIFS($D:$D,F4,C:C,">="&LEFT(G$3,FIND("~",G$3)-1)*1,$C:$C,"<="&MID(G$3,FIND("~",G$3)+1,LEN(G$3))*1) G4セルの数式を右と下へ必要数コピーすれば良いでしょう。 貼付画像はExcel 2013で検証した結果です。 Excel 2007以降のバージョンで再現できるはずです。

purikopuriko
質問者

お礼

早速の回答ありがとうございます。 G4セルに COUNTIFS($D:$D,F4,C:C,">="&LEFT(G$3,FIND("~",G$3)-1)*1,$C:$C,"<="&MID(G$3,FIND("~",G$3)+1,LEN(G$3))*1) という関数をそのままコピーして貼り付けばいいんですよね…? そうするとG4からI6まで全て0という表記になってしまうんですがこの関数をどこかいじらなければならないんでしょうか??

関連するQ&A