- ベストアンサー
EXCEL 関数 条件に当てはまる行数を求める
1行の中の、複数の列の値に条件をつけ、それに当てはまる行数を関数で求めたいのですが、どうやれば良いのでしょうか? 行数を求めるのはおそらくROWS?だと思うんですが、その行の中の複数の列の条件をどのように指定すれば良いのか分からずに困っております。 (例) 列Cに文字列"青"、列Fに数値"5"が両方満たす行がいくつあるかを、どこかのセルに関数で求める。 よろしくおねがいいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
この際だから、配列数式を使うというやり方を記しておきます。 今までご存知でしたか。興味かあれば勉強してください。 #5の例ですと =SUM(IF((C2:C10="青")*(F2:F10=2),1,0)) 両条件は掛け算*になります。真であれば1、偽であれば0を足(SUM)せば 件数になります。式の意味は、そういう意味です。 と入れて、SHIFT+CTRL+ENTERを同時に押します。最初、最後が{}でくくられます。 もちろん結果は3です。
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 ご質問者は、#1,#4のshiotan99さんへのフィードバックがないようなので、私のほうから、想像で書かせていただきます。もし、間違っていたらご容赦ください。たまたま、私のほうで、Match関数で同じような例が出てきたので、そう思った次第です。 #1 ~#3さんのSUMPRODUCTで正しく出なかった理由は、 >列Cに文字列"青"、列Fに数値"5"が両方満たす行がいくつあるかを、どこかのセルに関数で求める。 これは、データの型の問題ですね。「5」は、数値の5ではないようです。文字列の5のようです。また、セルには、単独で、「青」 と 「5」が存在しなければなりません。文字列の中にあるのなら、これらの式ではできません。 「5」が文字列ですと、以下のようには出来ません。 =SUMPRODUCT((C1:C10="青")*(F1:F10=5)) このように、一旦、型のキャストしてあげなくてはなりません。 △ =SUMPRODUCT((C1:C10="青")*((F1:F10)*1=5)) しかし、こうすると、いつも数値ならよいのですが、そうはできないことがあります。以下のようにすれば、いつでも、検索値は文字列です。(ただし、こういう数式は、どちらかというと、実務的ではなく、空いたセルがあるなら、補助列を使ってしまって、=C1&F1 で、フィルダウンコピーして、その補助列で検索したほうが、得策です。) =SUMPRODUCT(((C1:C10)&(F1:F10)="青5")*1) それから、質問者の方はよくご理解なさっていないようですが、計算過程では、足し算をしています。条件のあったものは、戻り値 Trueになります。Trueを演算すると、1が立ちます。そうでないものは、Falseになります。False は、演算すると、0になります。だから、合計すれば、条件に合ったものの数が出てくるのです。 >=SUMPRODUCT((C:C="青")*(F:F=5)) >としたかったんですけど、なぜかエラーになります。 これは、Excelの仕様ですね。配列は、全行を範囲とすることが出来ません。しかし、また、ExcelのVersionによっては、配列数のコマ数が、5,400個を少し越えた時点で、正しく出ないことがあります。仮に、解が出ても、異様にワークシートが重くなることがあります。なお、SUMPRODUCTは、単に配列の確定をしないで済むだけではなく、SUMPRODUCTの計算は、一旦、Excelの計算プログラムの中で、内側の括弧の中から計算を取り出しながら、計算している模様で、一般的な配列の確定作業での、キャッシュの中で参照範囲を取り出して計算するよりも、ずっと速いようです。 しかし、あまり多いようでしたら、やはり、Dのついたデータベース関数のほうが速いです。
お礼
Wendy02さん。仰るとおり、あまり理解できてないようです。 先のお礼を書いて以降、夜間の来客で今まで外出しておりましたので、お礼が遅くなって申し訳ありませんでした。 ただ、せっかくなんですが、難しい・・・ データベース関数というのと配列関数という意味も分かってないので、今、目が・・・・・・状態です。 ただ、{}でくくってる計算式は、私の競馬データでうまく行ってるので、まず間違いなく、仕事での用は満たすと思います。 あとは、ここでお教え頂いた内容が理解できるかどうか・・・ さすがに、これにいつまでも付き合わせるわけには行かないので、この質問はこれで閉じます。 Wendy02さん以外の皆様も、ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
SumProductが人気があり、すでに回答が出たので、 Dcountでやってみます。 C1:F10に カラー 数値 青 2 黄 5 青 5 赤 1 黄 4 赤 6 青 2 赤 1 青 2 第1行目に、項目見出し、を入れました(必須) 条件をH1:I2に(データ部以外のどこでもよい) カラー 数値 青 2 結果を出すセルに =DCOUNT(C1:F10,F1,$H$1:$I$2) 結果3です。 >めるのはおそらくROWS?だと思うんですが 見当はずれです。Rows()はほとんど質問の関数式の回答の中に使ったことがありません。(他の方のもふくめ。) Row()もありますが、脇役的です。 行数と考えず、こういう場合、件数を求めるという表現になっていると思う。
- shiotan99
- ベストアンサー率68% (140/203)
No.1です。 > SUMPRODUCTという関数は、見たところ合計値を求めるようですが、 > 私の求めたいのは、列Cと列Fの条件をともに満たす行数です。 実際に数式を入れて試されたのでしょうか? 行数を求める数式として回答したつもりですが・・ 試された上で、結果が 0 になったのであれば、 実際にどのようなデータなのかを具体的に提示してください。
お礼
Wendy02さんの指摘で、御礼をし忘れているのに気付きました。すみません。せっかく教えていただいたのに。 さて、No.6のimotanさんにこの内容を答えております。 結果は0になりました。実際は、趣味の競馬データを使ったのですが、本来は、職場にある会社のデータで使おうと考えております。 ただ、imotanさんの教えて頂いたSUMを{}でくくるので、ほぼ間違いなく必要を満たせそうです。 ありがとうございました。
- gutugutu
- ベストアンサー率14% (184/1234)
=SUMPRODUCT((C1:C○○="青")*(F1:F○○=5)) で出来ると思います。C1:C○○は範囲です。 C1からC50まで入力してあればC1:C50です
お礼
gutugutuさん。ご回答ありがとうございます。 No.1さんと同じ内容でした。 No.1さんへの返答をもって、gutugutuにもお礼とさせていただきます。
- masa_019
- ベストアンサー率61% (121/197)
質問の例の場合だと、 =SUMPRODUCT((C1:C65535="青")*(F1:F65535=5)) でどうでしょう。 でも、これだと列全体より1行足りないので本当は、 =SUMPRODUCT((C:C="青")*(F:F=5)) としたかったんですけど、なぜかエラーになります。 前者の数式でも十分足りると思いますが、いかがでしょう?
お礼
masa_019さん。ご回答ありがとうございます。 No.1さんと同じ内容でした。 No.1さんへの返答をもって、masa_019にもお礼とさせていただきます。
- shiotan99
- ベストアンサー率68% (140/203)
こんにちは~ > 列Cに文字列"青"、列Fに数値"5"が両方満たす行がいくつあるか 対象範囲が、1行目から 10行目だとすれば、 =SUMPRODUCT((C1:C10="青")*(F1:F10=5)) ということでしょうか?
お礼
ご回答ありがとうございます。 私がshiotan99さんの回答を見たとき、既にNo.3まで回答いただいておりましたが、全く同じ回答でした。 よって、代表して、No.1さんの所にお礼を書かせていただきます。 ただ、残念ながら、求めたものにはなりませんでした。 SUMPRODUCTという関数は、見たところ合計値を求めるようですが、私の求めたいのは、列Cと列Fの条件をともに満たす行数です。合計ではありません。 何行あるかを求めたいので、足してしまうと・・・ よって、求められたものが、0になってしまいました。 ただ、この関数も知らなかったものなので、勉強になりました。 今後の参考にさせていただきます。
お礼
imogasiさん。ありがとうございます。 No.5とあわせてお礼させてください。 まず結果から申しますと、No.6で教えて頂いたSUMとIFを組み合わせるほうで、{}でくくったところで求める結果が得られました。 正直、まだ{}の意味は分かってないんですし、IF文のところもどういう動きになっているのか、見えてないところがあるんですけど、他でも使えそうです。 残念ながら、DCOUNT関数は、<Databese>とか<Criteria>とか<フィールド>とかの意味が全く分かりませんでした。ゆっくり勉強します。 実際のデータに関する質問がありましたので説明しますと、実は、元ねたは会社にありまして、実際に使いたいデータは今手元に無いので、別のねたを使いました。 私は競馬好きなので、架空の馬の適当な成績を表にして、出走レース名、レースグレード、着順、という感じの表を作りました。 そのなかで、GIレースに何勝したかという数値を求めるための質問でした。 1レース1行で作ったので、グレードの列が"GI"で、着順の列が数値の1である行の数を数えたかった訳です。 会社の元ねたの一部を思い出して、家にいる間に試して見ます。ありがとうございました。