• ベストアンサー

excel2003で複数条件

A列にA~Gのアルファベットかブランク、B列に数字(0~5)かブランクが入っています。 A列にアルファベット、B列に0が入っている行を抽出し、 A列とB列がAと0、BとO、CとO・・・の行がそれぞれABCごとに何個あるかカウントしたいのですが、 どのような論理式を作ればよいでしょうか? なおexcel2003を使用しておりますのでcountifとsumproductは使うことはできますが、countifsを使うことはできません。 よろしくお願い致します。。

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.3

>なおexcel2003を使用しておりますのでcountifとsumproductは使うことはできますが、countifsを使うことはできません。 SUMPRODUCT関数が手頃と思います。 =SUMPRODUCT(($A$1:$A$100=”A")*1,($B$1:$B$100=0)*1) 簡略化    ↓ =SUMPRODUCT(($A$1:$A$100=”A")*($B$1:$B$100=0)) A列の比較文字(”A")を可変にしたいときは CHAR(ROW(A65)) のようにすれば下へコピーしたときに"B"~"G"に変化します。 =SUMPRODUCT(($A$1:$A$100=CHAR(65))*($B$1:$B$100=0)) 貼付画像はExcel 2013で検証したものですがIF関数とCOUNT関数を組み合わせた処理です。 COUNT関数の代わりにSUM関数でも計数できます。 何れもExcel 2003で計数可能な関数のみで構成されています。 但し、IF関数の戻り値を配列で返す必要があるので式の確定時にCtrl+Shift+Enterの操作が必要です。 =COUNT(IF(($A$1:$A$100=E$1)*($B$1:$B$100=$D2),1,""))

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 A列にA~Gのアルファベットかブランク、B列に数字(0~5)かブランクが入っている行が、数百行(行番号ではなく、範囲内に含まれている行数)程度までである場合には、回答No.1様の方法でカウントされるのがベストだと思います。  一方、もし、数千行以上にもなるデータを対象にする場合には、SUMPRODUCT関数では処理が重くなりますので、作業列を使用する方法が使われます。  例えば、G列を作業列として使用するものとしますと、まず、G1セルに次の様な関数を入力して下さい。 =IF(OR($A1="",$B1=""),"",$A1&"■"&$B1)  次に、G1セルをコピーして、G2以下に貼り付けて下さい。  これで、例えばA列に「A」、B列に「0」が入力されている行の場合は、G列には「A■0」と表示されます。  そして、例えばA列が「A」で、B列が「0」となっている行をカウントする場合には、次の様な関数とします。 =COUNTIF($G:$G,"A■0")  尚、G列において「■」を間に挟んでいるのは、どこからどこまでがA列のデータで、どこからどこまでがB列のデータであるのかという事を区別するための区切りで、通常ではデータとして使用される事のない文字列でさえあれば、何も「■」に限らず、「□」でも「◎」でも、「★」であっても何でも構いません。  A~Gのアルファベットと0~5の数字との組み合わせの場合は、間に区切りが無くとも区別する事は容易なため、区切りを挟める必要は無いのですが、これがもし、例えばコード番号と型式名の組み合わせの場合の様に、A列のデータとB列のデータの双方に数字やアルファベットが現れる可能性がある場合には、区切りを入れて区別をつける必要があるため、念の為に区切りを入れた場合の方法を回答させて頂きました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

ゼロであって空白じゃない、と丁寧に計算するだけです。 D1以下にABCDEFGを羅列 E1: =SUMPRODUCT((A$1:A$999=D1)*(B$1:B$999=0)*(B$1:B$999<>"")) 以下コピー。

関連するQ&A