• ベストアンサー

エクセル関数COUNTIFでのAND条件

0より大きく、5以下であるセルの個数を取得するCOUNTIF関数で、AND条件で、 =COUNTIF(A1:A10,"AND(>0,5<=") としても答えは0になってしまいます。 下記のように0より大きい個数を求め、そこから5を越える個数を引けば答えは出るのですが、ANDではもとめられないのでしょうか? =COUNTIF(A1:A10,">0")-COUNTIF(A1:A10,">5")

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

COUNTIF関数ではAND条件は使用できません このような場合は質問にあるように >=COUNTIF(A1:A10,">0")-COUNTIF(A1:A10,">5") とするか、SUMPRODUCT関数を使用します =SUMPRODUCT((A1:A10>0)*(A1:A10<=5)*1) で0より大きく5以下のセル数が求められます

moooon
質問者

お礼

AND条件は使用できないのですね。 ありがとうございました。

その他の回答 (5)

回答No.6

再度の登場、kobouzuです。 >考えてみましたが、A1:A10>0がTRUEの行とA1:A10<=5がTRUEの行を乗ずるとTRUE*TRUE=1になるからでしょうか。 >もし、SUMPRODUCTを使って0よりおおきいセルの数を >=SUMPRODUCT((A1:A10>0)*1) >のように計算する場合は、*1が必要のようですから。 そうですね。 ただ、最後の「*1が必要のようですから。」がちょと気になりましたのでダメ押し。(^^;;; 結論からいうと、 ●「TRUE,FALSEは【計算】に使って初めて、1,0 とみなされる」ということです。 (1)SUMPRODUCT((A1:A10>0)*1) では、*1で計算に使ってますから     TRUE*1 = 1     FALSE*1 = 0     TRUE*1 = 1 という配列ができ、正しい結果になる (2)=SUMPRODUCT((A1:A10>0)) 「*1無し」では計算に使われてないのでTRUE,FALSEは、1,0にみなされず     TRUE = TRUE(?)      FALSE = FALSE(?)     TRUE = TRUE(?) とういう配列ができ、各要素は無視され、結果は0になる。   *1は、TRUE,FALSEを1,0に変換するために強制的に計算させる役目をしているということになります。 で、=SUMPRODUCT((A1:A10>0)*(A1:A10<=5)) ですが、 これは、(A1:A10>0)*(A1:A10<=5)で掛け算(計算)してるので その時点で、0,1に変換されてることになりますから、 さらに、*1 で計算させる(変換させる)必要はないということになりますよね。 うーん、だらだらとして説明???? ●「TRUE,FALSEは【計算】に使って初めて、1,0 とみなされる」 と言いたかっただけなんですが。。。 以上です。

moooon
質問者

お礼

ありがとうございました。よく分かりました。

noname#262398
noname#262398
回答No.5

=INDEX(FREQUENCY(A1:A10,{0,5}),2) で、どうでしょう?

moooon
質問者

お礼

有難うございました。 答は得られましたが、難しすぎてなぜなにか理解できませんでした。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.4

◆結局=COUNTIF(A1:A10,">0")-COUNTIF(A1:A10,">5")と同じですが =SUM(COUNTIF(A1:A10,{">0",">=5"})*{1,-1})

moooon
質問者

お礼

有難うございました。 難しすぎて理解できませんでした。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 実際のお仕事では使わないと思いますから、ちょっと、実験として考えてみました。 >=COUNTIF(A1:A10,"AND(>0,5<=")  ~ >ANDではもとめられないのでしょうか? "AND(>0,5<=)" もともと数式は違っていたし、引数の構造も型も違うので、AND(...,...) では入らないと思います。ただ、この前も似たような話が出ていましたね。DCOUNT で、クライテリアを中に入れられるもの、というような内容でした。 検索条件のデータ型が、仮に数式でも、AND(>0,5<=) 自体が、ひとつの解を返してしまうので、このようなスタイルの数式では、データの範囲に与えられません。 > =SUMPRODUCT((A1:A10>0)*(A1:A10<=5)) このような配列数式の論理積で出す以外では、 おそらくは、この検索条件は、単純なデータ構造に限るので、以下のようなスタイルになるのではないかと思うのです。 =SUMPRODUCT(COUNTIF(A1:A10,ROW(A1:A5))) というように、加算方式にしか思いつきません。(整数のみに限ります) たとえば、 A1 に一行挿入して、仮のタイトルを入れます。(例:"AAA")  =DCOUNT(A1:A11,A1,F1:F2) そして、クリアテリアとして、F1をブランク、F2 に  =IF(AND(A1>0,A1<=5),TRUE) とすれば、取れますね。 今のところ、データベース関数以外で、同じような引数の型を取る関数は、ひとつもありませんね。データベース関数のように、クライテリアを外に出すなら可能ですが、論理式で、積か和を表す演算子が、ワークシートにはないからです。AND, OR は、関数です。代用品が、「*」と「+」ですが、配列数式の中でしか生きていませんし、演算ステージが、まったく違います。 でも、できるという人がいるかもしれませんね。既存の定石や定番は知られていますが、それ以外は、まったく、まだ未知の世界です。1年前にできないとされていたことも、いずれはできる人が出てきたりしますから。

moooon
質問者

お礼

有難うございました。 難しすぎて理解できませんでした。

回答No.2

こんばんは。 今回のように条件が複数ある場合は、zap35さんの回答のSUMPRODUCTが 配列数式を使わないでいいぶん簡単ですね。 ここで、老婆心ながら一言。 式を理解する為にzap35さんの式をも少し正確に書くと >=SUMPRODUCT((A1:A10>0)*(A1:A10<=5)*1)  =SUMPRODUCT((A1:A10>0)*(A1:A10<=5)) のように、最後の、*1 は不要です。 なぜそうなるのかを考えることはこの式を自分のものにするうえで 非常に大切なことだと思われますので折角ですからご自身で考えてみてください。 以上です。  

moooon
質問者

お礼

ありがとうございました。 考えてみましたが、A1:A10>0がTRUEの行とA1:A10<=5がTRUEの行を乗ずるとTRUE*TRUE=1になるからでしょうか。 もし、SUMPRODUCTを使って0よりおおきいセルの数を =SUMPRODUCT((A1:A10>0)*1) のように計算する場合は、*1が必要のようですから。