- ベストアンサー
2つの条件を満たすものの合計
簡単な質問で恐縮ですがいろいろやってみてわからないので教えてください。 顧客名簿から2つの条件を満たす人数を探すやり方がわかりません。 具体的な例をあげると、 血液型がA型で関東出身の人。などです。 2つ目の関東出身の人の出身欄は不明(空欄)もあります。 どちらか1つの条件の人数を出すならCOUNTIF関数を使えば出ますが、2つを満たすとなるとどのような関数を使えばよいのかわからず困っています。 ちなみにExcelは2003タイプを使用しています。 教えていただけると助かります。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 再質問の件について・・・ まずエラー処理に関してですが、 前回の数式ですと、F1・F2セルが空白ですと 数式の範囲指定(1~100行目)までの空白セルをカウントしてしまいます。 F1・F2セルどちらかが空白であれば、表示セルも空白に!といった感じのエラー処理をした方が良いのでは?というコトです。 エラー処理後の数式としては =IF(COUNTBLANK(F1:F2),"",SUMPRODUCT((B1:B100=F1)*(C1:C100=F2))) といった感じですかね。 次にSUMPRODUCT関数の説明ですが、 単に行の掛け算では「PRODUCT関数」というものがあります。 (PRODUCT関数は空白セル・文字列セルは除外されます) 行毎の掛け算結果を足し算したものが「SUMPRODUCT関数」だと思ってもらえば良いと思います。 前回の数式 =SUMPRODUCT((B1:B100=F1)*(C1:C100=F2)) で説明すると B1~B100セルがF1セル(A)と一致する行が「TRUE」=1となり その他の行は「FALSE」=0 となります。 同様にC1~C100セルでF2セル(関東)と一致するものが「TRUE」、その他が「FALSE」です。 そして、各行毎に掛け算をしているので、 TRUE×TRUE(1×1)の行だけが「1」で、「1」の数(行数)を足し算したものが SUMPRODUCT関数です。 条件がいつも決まっているのであれば、前回の数式は =SUMPRODUCT((B1:B100="A")*(C1:C100="関東")) としてもOKです。 SUMIF関数は条件が1つだけでのカウントになりますが、複数条件でのカウントの場合は このようにSUMPRODUCT関数を利用する人がほとんどだと思います。 一つ注意しなければならないことがあります。 SUMPRODUCT関数は配列数式になってしまいますので、あまりにデータ量が多い場合は PCにかなりの負担をかけてしまいます。 (1000行程度であれば問題ないかもしれません) その場合、作業用の列などを使って極力PCに負担を掛けないようにする必要があります。 以上、長々と書きましたが参考になりますかね?m(_ _)m
その他の回答 (5)
- Niwatori-Sanpo
- ベストアンサー率62% (1168/1867)
No.5です。 すみません訂正です。 添付画像にある DCOUNTA関数の記述例として、 ←入力例「=DCOUNTA(B2:E25,B2,G22:H23)」 とありますが、正しくは… ←入力例「=DCOUNTA(B2:E22,B2,G20:H21)」 …です。 絶対参照にしていなかったので、編集しているうちに参照先が 変わってしまいました。 解像度が低い場合は見にくいと思いますが、いちおう訂正して おきます。 失礼しました。 m(_ _)m
お礼
補足ありがとうございます。 &はうまく使えませんでしたが、SUMPRODUCTを使ってできました! 関数奥深いですね。 もっと勉強します。 ありがとうございました。
- Niwatori-Sanpo
- ベストアンサー率62% (1168/1867)
>顧客名簿から2つの条件を満たす人数を探すやり方 別解ですが、DCOUNTA 関数を使う方法は如何でしょう? DCOUNTA関数の使い方 http://excel.onushi.com/function/dcounta.htm なお、添付画像の中にある SUMPRODUCT 関数の説明の中で 「(合計範囲)」という引数がありますが、以前何処かからか 拾ってきた情報を検証もせずにメモしておいただけです。 実際、オイラにもよく分かりませんでした。 ただし、DCOUNTA 関数は使えます。 Excel 2000でもしっかり使えていました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
SUMPRODUCTといった関数は難しいですね。データが多くなれば計算速度も遅くなります。 カッコよく解決できればそれに越したことはないですがご自分の力でもっと別の方法を考えることでしょう。 例えば作業列を使って対応する方法です。作業列が目障りでしたらその列を選択して右クリックし「非表示」を選択すればよいでしょう。 A2セルから下方に出身地が入力されていてB2セルから下方には血液型が入力されているとします。そこで作業列としてC2セルには次の式を入力して下方にドラッグコピーします。 =A2&B2 後はその列を使って例えば関東でB型の人の数は次の式で求められますね。 =COUNTIF(C:C,"関東B型") 検索したい出身地をD1セルに血液型をD2セルに乳ryくするなどの場合には次の式で求められますね。 =COUNTIF(C:C,D1&D2)
お礼
関数で&が使えるとは知りませんでした。 パソコンに負担がかかるという概念も初めて知りました。 300件くらいの処理なのですが、両方試してみようと思います。 ありがとうございます。
- tom04
- ベストアンサー率49% (2537/5117)
たびたびごめんなさい。 >入力部分は※部分は手入力するのでしょうか… の部分を忘れていました。 基本的には関数の引数ダイアログボックスを使用していますが、 セルを選択する以外は手入力でやっています。 当然すべて手入力でしている方もいらっしゃると思います。 関数の使い方のURLがありますので、載せておきます。 http://excel.onushi.com/function/math.htm 参考程度で覗いてみてはどうでしょうか? ご存じのサイトならごめんなさいね。m(_ _)m
お礼
やはり手入力するんですね。 自分でやってみてそこがわからなかったので… がんばります。 ありがとうございます!
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! Excel2003以前のバージョンですと、 SUMPRODUCT関数になります。 ↓の画像でF3セルに =SUMPRODUCT((B1:B100=F1)*(C1:C100=F2)) (エラー処理はしていません) という数式を入れています。 これで血液型が「A」出身地が「関東」の人数が表示されます。 ※ Excel2007以降のバージョンだと、COUNTIFS関数が用意されています。 参考になりますかね?m(_ _)m
お礼
解答ありがとうございます! SUMPRODUCT関数の質問です。 そもそもSUMPRODUCT関数がよくわかりません…。 SUMIFと理解がごっちゃになってしまうのですが… SUMIFは足し算、SUMPRODUCTがかけ算、という理解は間違いなんですよね? 入力部分は※部分は手入力するのでしょうか… あとエラー処理はどんなことをしますか? お手数ですが、ご指導お願いします!
お礼
ご丁寧にありがとうございます! 早速今日仕事に生かしてみます。 助かりました…本当に嬉しいです。 参考URLもみて勉強しますね。