- ベストアンサー
エクセルの関数SUMPRODUCTとFINDを使ったデータの数え方
- エクセルの関数SUMPRODUCTとFINDを使って、特定の条件を満たすデータの数を求める方法について教えてください。
- 質問者は、あるシートにおいて特定の条件を満たすデータの数を数えたいと考えています。具体的な条件は、B列にあるデータの任意の文字であって、かつD列にあるデータの任意の文字も含むセルの数です。
- 関数SUMPRODUCTを使用することで、条件を満たすデータの数を求めることができます。関数FINDは、ある文字がセルに含まれているかどうかを判定するために使用されます。別のシートに結果を表す方法についてもアドバイスを求めています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
シート名は、 =SUMPRODUCT(ISNUMBER(FIND("C",Sheet1!B1:B100))*ISNUMBER(FIND("E",Sheet1!D1:D100))) のように入力すればOKです。 --- データベース関数を使うのであれば、DCOUNTAを使います。 データベース関数を使う場合、 データが入っている列の1番上のセル(この例なら、B1とD1)に、 データの種類の名前(例えば「住所」「氏名」等)が入力されている必要があります。 次に、検索条件を書きます。 ここでは、E1~F2に 住所 氏名 C E と埋めます。 最後に結果を出したいセルに =DCOUNTA(B1:D100,"住所",E1:F2) と入れればOKです。 別シートの表から検索する場合は、SUMPRODUCTの例同様、シート名!を加えてください。 データベース関数については、例えばこのページが参考になります。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/count.htm#dcounta --- どちらの方法を使うかですが、 大量のデータを検索する場合、 配列形式の関数(SUMPRODUCT等)は動きが極めて遅くなりますので、 検索に特化したデータベース関数を使うのはとても有益です。 ただ、 ・条件を書くためのセルを作らなければいけない ・データの一番上にデータの名前を埋めなければいけない ・知らない人がメンテナンスしづらい などデメリットもあります。 そんなに大きくない表であれば、使い慣れたSUMPRODUCT関数を使うのも良いかと思います。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
2列のそれぞれの条件での探索は、エクセルでは(他のデータベース言語ではその備えがあるが)難しい。 だから2列を結合して、1列のデータに持っていって(そのため作業列は要るがやむをえない)、考える。 ーー Sheet2で第2行目から(Sheet2は特別意味なし) C列 D列 E列(何処でも空き列)でよい) asdf xyzu asdf......xyzu...... dfg sxuf dfg.......sxuf...... s xyuf s.........xyuf...... dfg hude dfg.......hude...... ersdggg sxyzder ersdggg...sxyzder... t sdft t.........sdft...... s adre s.........adre...... dfg dfg dfg.......dfg....... xsdfgh wexyz xsdfgh....wexyz..... E2の式は =C2&REPT(".",10-LEN(C2))&D2&REPT(".",10-LEN(D2)) 後尾に埋める文字をコンマにしているのは、桁数が良くわかるようにしている。スペースだとわかりにくいが、スペースのほうが本来良い。 C,D列とも最大10桁以内と仮定した場合の式。両列で最大桁が違っていても式の定数が変わるだけ。 仮に定桁式結合と呼ぼう。 これで C列はSdを含み、かつD列はxyzを含む行の数を求める 空きセルに =COUNTIF(E2:E10,"*sd*xyz*") で上記例では3 ワイルドカードが使える。 これで良いと思うが、色んなケースを十分考えていないので、質問者がチェックしてください。 ーー 別シートに式を入れるなら =COUNTIF(Sheet2!E2:E10,"*sd*xyz*") この部分は常識的なことです。
- MackyNo1
- ベストアンサー率53% (1521/2850)
参考までに 部分一致でDCOUNTA関数を利用する場合は、No1の回答に示されている条件や皆さんから紹介されているリンクの情報では、正しい個数を返さない可能性があります。 DCOUNTAなどのデータベース関数はバージョンによる違いがあり、Criteriaに入力する条件によって、前方一致で検索した入り完全一致で検索する可能性があります。 http://www.kenzo30.com/ex_kisotyu/ex_ks_tyukyuxb3_2_1.htm 例えば「C」を含むという条件なら、ワイルドカードを使って「'=*C*」(アポストロフィーの後に=、アスタリスク、文字列、アスタリスク)と入力する必要があります。 ちなみに後方一致(最後がCで終わるセルの個数)なら「'=*C」と入力することになります。
- mshr1962
- ベストアンサー率39% (7417/18945)
=SUMPRODUCT(ISNUMBER(FIND("C",シート名!B1:B100))*ISNUMBER(FIND("E",シート名!D1:D100))) のようにセル範囲の前にシート名を設定するだけです。 DCOUNT関数の使い方は下記を参照 http://excel.onushi.com/function/dcount.htm
お礼
早々にありがとうございます ご丁寧にありがとうございます みなさんすぐにアドバイスいただき、嬉しいかぎりです 早速作成してみます
=SUMPRODUCT(ISNUMBER(FIND("C",SheetA!B1:B100)*FIND("C",SheetA!D1:D100))+0)
お礼
早々にありがとうございます 夜中にもかかわらずありがとうございます 実施してみます
お礼
早々にありがとうございます シート名はそこに入力すればよかったのですね やはりDCOUNTAだと、データーの種類の名前を入れないとだめなんですね その方法は、できればとりたくないと考えておりました 早速やってみます 大変ありがとうございました