こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのCOUNTIF式について教えてください

こんばんは。

A1 10月21日
A2 10月30日
A3 11月3日
A4 11月12日
A5 10月1日
A6 3

上記のような列で、先頭2文字が「10月」となっているセルの数を数える式をA6に入れることで、
答えの「3」と表示させたいのですが、うまくできません。

=COUNTIF(A1:A5,LEFT(A1:A5,3)="10月") としています。

お手数ですが、エラーの原因と解答をお願いいたします。

投稿日時 - 2011-10-30 20:14:55

QNo.7103591

すぐに回答ほしいです

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

COUNTIF関数の検索値の部分が正しくない(提示されている数式はTRUEまたはFALSEを返しています)ためです。

また、検索データが「10月初旬」のような文字列ならワイルドカードを使ったCOUNTIF関数が利用できますが、日付の場合は、実際は1900年1月1日を1とするシリアル値という数字で入力されているのでLEFT関数での左3文字は3桁の数字を取得することになります。

このようなケースでは、COUNTIF関数ならNo1の回答のような日付範囲の引き算を使用するのが一般的ですが、MONTH関数でシリアル値から月を取得する数式を利用して、以下のようなSUMPRODUCT関数で計算することもできます。

=SUMPRODUCT((MONTH(A1:A5)=10)*1)

=SUMPRODUCT((TEXT(A1:A5,"m")="10")*1)

投稿日時 - 2011-10-31 00:55:30

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

=COUNTIF(A1:A5,LEFT(A1:A5,3)="10月")の式についてですが、範囲の後には条件を入力するのですが、その条件は数値、文字列、式を入力できますが論理式ではなく、">0"のように文字列で指定することになります。LEFT(A1:A5,3)="10月"のような式を入力することはできません。
もう一つの問題はセルの表示では10月1日のようになって表示されていますが実際にはシリアル値が入力されているので、例えば今年の10月1日はセルの表示形式を「標準」にすることで40817となります。10月というセルの表示が幾つあるかを検索するのに"10月"としても意味がありません。

10月の日付のセルの数を数える式でしたらA6セルに次の式を入力するのがよいでしょう。

=COUNTIF(A1:A5,">=10/1")-COUNTIF(A1:A5,">=11/1")

または

=COUNTIF(A1:A5,">=2011/10/1")-COUNTIF(A1:A5,">=2011/11/1")

投稿日時 - 2011-10-31 09:29:00

こんばんは

エクセル勉強3日目の者です。
配列、分岐の練習がてらに利用させてもらいました。(すみません)

=TEXT(SUM(IF(LEFT(TEXT(A1:A5,"m月"),2)*1=10,LEFT(TEXT(A1:A5,"m月"),1)*1,"")),"d")

countifは配列が利用できなかったので、sumで代用させて頂きました。(悪しからず)

a6セルに上記の式を代入して、【ctrl+shift+enter】で入力して下さい。
(【】内の操作重要!。普通に入力すると#valueになります)

投稿日時 - 2011-10-31 00:19:47

ANo.2 と ANo.3 の回答者です。

エラーの原因:
 ◇B列のセルが日付になっている(シリアル値?)場合、 LEFT関数では、拾えないのでは?
 ◇先頭2文字が「10月」 → 3文字ですね 1 と 0 と 月で。
 ◇1月から9月までは2文字でもよいのです。
 だから、セル全体を日付と考えてそのセルの「月」の数字でB列に表してその10だけを数えます。

 IF関数でスピンボタンでD1に1~12までの数をシームレスに表示します。
 次にB列とD1を比べて同じなら「1」とIF関数で C 列に表示させます。
  
フォームのスピンボタンで1~12をD1に表示させると、
 c列に1(○印でも)を表示させて、それを数えるのもよいと思います。
   1月から12月まで別々に列を作れば、すべてが数えられます。

   

投稿日時 - 2011-10-30 22:11:53

「ワイルドカード」というものを覚えましょう。

=COUNTIF(A1:A5,"10月*") 

というかどうでもいいけど、「3文字」ですよね?

投稿日時 - 2011-10-30 21:26:13

補足

ご回答ありがとうございます。一番シンプルな方法をご紹介いただきありがたかったのですが、実際に試してみても計算結果は0のままでした。エクセルのバージョンは2003です。*は全角でも半角でも同じでした。何が原因でしょうか。

投稿日時 - 2011-10-30 22:58:36

画像添付ができていませんでした。  (..)

投稿日時 - 2011-10-30 20:53:38

素人ですので、ベテランが出られる前に (=^・^=)

B1に下式をコピーして さらに~B5にコピーします。
 ※順位を間違えないでください。
=IF(ISNUMBER(A1),TEXT(A1,"m")+0,"")

次にB1からB5で10と表示されたセル数を数えます。
  
=COUNTIF(B1:B5,10)

式を一つにまとめられれば、より簡単です。

投稿日時 - 2011-10-30 20:49:48

ANo.1

COUNTIFの条件式はIFなどの条件式と書き方が違います。
詳しくはヘルプを見てください。
また、日付は内部的には数値として保存されているので、数値と同様の大小比較が行えます。


Excel2007以降の場合
=COUNTIFS(A1:A5,">=10月1日",A1:A5,"<11月1日")
10月1日以上 かつ 11月1日未満 をカウントします

バージョンを問わず
=COUNTIF(A1:A5,">=10/1")-COUNTIF(A1:A5,">=11/1")
10月1日以上の数 - 11月1日以上の数 を計算します


日付の書き方は、どちらの書き方でも変わりません。

投稿日時 - 2011-10-30 20:41:48

あなたにオススメの質問