- ベストアンサー
エクセルのデータベース関数について
エクセルのデータベース関数について質問します。 データベースの指定された列を検索し、条件を満たすレコードの中で数値が入力されているセルの個数を数えたいと思います。が、その列が複数あり、また、条件も複数ある場合、DCOUNT関数を使うと、データベース関数に指定した条件が設定されているセル範囲をいくつも設定しなくてはならないのでしょうか? 以前、Lotusを使っていた時は、#and#という形で、条件をいくつも指定することが出来たのですが、そういったことは出来るのでしょうか? わかりにくい表現かもしれませんが、よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
やりたいことは >例えば 列がA,B,C,Dとあり、おのおのに、1から5までの数が入っていたとします。そこで、列Aで1かつ列Cで3が入力されているセルの数を数え・・・ ということなので、A1からC5までデータが入っていれば、 =SUM(IF(A1:A5=1,IF(C1:C5=3,1,0),0)) と数式の窓に入力して、Ctrl+Shift+Enter で登録したらでませんか。 配列数式で、セルには {=SUM(IF(A1:A5=1,IF(C1:C5=3,1,0),0))} と登録されます。 A列が1でC列が3の場合は1、その他は0としてそれを集計しています。
その他の回答 (4)
- nishi6
- ベストアンサー率67% (869/1280)
追加です。 >以前、Lotusを使っていた時は・・・ Lotusもいいソフトでした。一時期、本当にお世話になりました。 ただ、Excelを使い始めて、Lotusを使う気にならないのが本音ですね。社内でも使用を止めていますし、全部移植してしまいました。 ただ、Excelはデータベースソフトではないので余り複雑な処理は保全面から考えて好ましくはないと思います。質問のような事例は、Access等なら間単にでます。 #3の事例は、 =SUM(IF(B2:B96="男",IF(C2:C96>=20,IF(C2:C96<30,IF(D2:D96>=2000,1,0),0),0),0)) と入力して、配列数式として登録すれば答えは出るはずです。当然、男に変えても、カウントの変わりに金額も集計できます。Excelも中々やりますね。
私も何度か、これに挑戦してきましたが、 あきらめたので、どうしても条件が多岐に渡るデータベースを扱う際や、 マクロを使いたい場合は1-2-3 「見せる」、「他人とのデータの共有する」ためのデータベースはエクセルと、 完全に使い分けています。 どうしてもエクセルでこれをやりたいときは、 やむを得ず条件設定のためのシートを新たに作って、 面倒くせ~とボヤキながらセル参照しています。 ただ、セルを節約する工夫はできると思います。 例えば、条件が全部で4つで、そのうち3つが同じで1つだけ異なるときは、 このようにします。実際にこのようなサンプルを作ってやってみました。 サンプル: B列は性別をヘッドとして、男または女 C列は年齢をヘッドとして、年齢の数値 D列は購入額をヘッドとして、商品を購入した金額 これを95件、ランダムに発生しました。 (購入金額は500~5000、年齢は15~75を動く) 共通事項1:20歳以上(ヘッドは年齢) 共通事項2:30歳未満(ヘッドは年齢) 共通事項3:2000円以上(ヘッドは購入額) この共通事項で、さらに男女別(ヘッドは性別)に集計する場合 1段目:性別,年齢,年齢,購入額,性別 2段目:男,>19,<30,>1999,女 (上手く上下に表そうと思ったのですが、無理なのでカンマ区切りとしました) このように5×2の条件シートを作ります。 (共通事項を真ん中に、双反する条件を両端におくのがポイント) =Dcount(対象範囲,2,条件範囲)については、 対象範囲はガッチリ固定し、条件範囲は固定しません。 条件を満たす男性を出力したいセルだけ入力し、 それを右にコピーすれば自動的に条件を満たす女性の数が出ます。 LOTUSでは、逆にこういうときは条件を書き直さないといけないのですよね。 (私の場合は、検索と置換を使って対処しています) セルは確かに節約できるけど、データベースが大きくなると、 ものすごく式が重くなるんですよね。 どっちもどっちなのかなあ。 書いているうちに自信がなくなりました(笑)
- usajun
- ベストアンサー率40% (10/25)
COUNTIF(範囲,AND(条件1,条件2))というのはどうでしょう?
お礼
ありがとうございます。 やってみたのですが値が0になってしまいます。 ちなみに COUNTIF(範囲,AND(条件1,条件2)) の範囲というのは1つの範囲しか出来ないのですよね? 例えば 列がA,B,C,Dとあり、おのおのに、1から5までの数が入っていたとします。そこで、列Aで1かつ列Cで3が入力されているセルの数を数え、他の表に集計させたいと思っています。 なにか別の機能を使ったりするのでしょうか? 出来たら、関数でやりたいと思います。
- yuhki_f
- ベストアンサー率32% (32/99)
EXCELでは、次のような書式になるはずです。 AND(条件1,条件2) COUNTIFという関数も準備されているので、HELPか何かで確認して見られてはいかがでしょうか。用途によっては使い勝手がよい関数です。
お礼
ありがとうございます。 たしかに、1つの条件だと、COUTIFは使い勝手がよいですよね。 そこで、条件がいくつもあるので、 AND(COUNTIF(条件),COUTIF(条件)) でやってみたのですが、値がTRUEとなってしまいます。 やり方が違うのでしょうか?
お礼
ありがとうございます。 =SUM(IF(A1:A5=1,IF(C1:C5=3,1,0),0)) の数式で出来ました。 やはり、LotusとExcelは同じように見えて、違うものなんですねぇ。 ただ、配列数式の概念がいまいちつかみ切れていないので勉強したいと思います。 ありがとうございました。