• ベストアンサー

エクセルで質問です。

エクセルで質問です。 添付のようなエクセルで、行が2000ほど続く表に関して、 データのカウントをしたいと思っています。 各セルは0か1の値です。 添付を例にすると、以下のようなことを調べたいのですが、 どのような方法があるでしょうか。 BDEに1が入っている行の数→   2 CEに1が入っている行の数→ 2 ACEに1が入っている行の数→ 2 ACDEに1が入っている行の数→ 1 ABCDEに1が入っている行の数→ 1

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

  • ベストアンサー
noname#204879
noname#204879
回答No.4

添付図参照 M2: =SUMPRODUCT((A$2:A$2001=H2)*(B$2:B$2001=I2)*(C$2:C$2001=J2)*(D$2:D$2001=K2)*(E$2:E$2001=L2))

その他の回答 (7)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.8

どのやり方でもいいですが、組み合わせパターンは32しかないのですべてのパターンで求めておくとよいです。カウント漏れがないように。

  • m_and_dmp
  • ベストアンサー率54% (987/1817)
回答No.7

layy様の回答がシンプルで拡張性・柔軟性があります。ただ、質問者様にご理解をいただいていないかも知れないと思い、マイナーチェンジしてみました。 タイトル行の「E」の右「F」列に「ABCDE」というタイトルを追加します。(名称は自由なんですが) タイトル行が1行目、データ行は二行目から、Aは1列目にあるものとします。 A_B__C_D__E____ABCDE 0__1__0__1__1___=A2*10000+B2*1000*C2*100+D2*10+E2 ....... 計算結果=01011 1__0__1__0__1___=A3*10000+B3*1000*C3*100+D3*10+E3 ....... 計算結果=10101 0__0__1__0__1___=A4*10000+B4*1000*C4*100+D4*10+E4 ....... 計算結果=01011 オートフィルでF列の2000行まで数式を入れます。 F列「ABCDE」の書式(表示形式)をユーザー定義で、00000 にします。 (しなくても計算結果は同じですが、感覚的にその方が分かりやすいと思いまして、) データのカウントを出力するセルに記述する式はつぎの通りです。 __BDEの数を表示するセル =CountIF($F2:$F2000,01011) ____CEの数を表示するセル =CountIF($F2:$F2000,00101) __ACEの数を表示するセル =CountIF($F2:$F2000,10101) _ACDEの数を表示するセル =CountIF($F2:$F2000,10111) ABCDEの数を表示するセル =CountIF($F2:$F2000,11111) ※ =CountIF($F2:$F2000,01011)... 01011と入れても1011になる。00101は、101自動的に変ってしまう。 layy様の回答のアイディアを頂戴していますので気に入ってもベストアンサーになさらないで下さい。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.6

参考。 2進数の考えです。 Aに1があれば16、Bに1があれば8、後同様に4、2、1と列に重みを付与します。 すると BDEのパターンは8と2と1で11、CEは4と1の5、どのパターンか1つの値で区別できます。 これで 01011を11 00101を5 5列を1つの値で表現できたら後は関数でカウントできます。 こういう掛け算足し算でもなんとかなる、ということで。 もう1列増えたら32。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

少し変わった方法です。 お示しの表が3行目から下方に有るとします。 F1セルからJ1セルまでにはBDE,CE,ACE,ACDE,ABCDEの文字が入力されているとします。 F2セルには次の式を入力してJ2セルまでオートフィルドラッグします。 =SUM(F3:F100) ここに表示されるのが該当する行の数になります。 F3セルには次の式を入力してJ3セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(OR(F$1="",$A3=""),"",IF((IF(ISERROR(INDIRECT(MID(F$1,1,1)&ROW(A3))),0,INDIRECT(MID(F$1,1,1)&ROW(A3)))+IF(ISERROR(INDIRECT(MID(F$1,2,1)&ROW(A3))),0,INDIRECT(MID(F$1,2,1)&ROW(A3)))+IF(ISERROR(INDIRECT(MID(F$1,3,1)&ROW(A3))),0,INDIRECT(MID(F$1,3,1)&ROW(A3)))+IF(ISERROR(INDIRECT(MID(F$1,4,1)&ROW(A3))),0,INDIRECT(MID(F$1,4,1)&ROW(A3)))+IF(ISERROR(INDIRECT(MID(F$1,5,1)&ROW(A3))),0,INDIRECT(MID(F$1,5,1)&ROW(A3))))=LEN(F$1),1,0))

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

以下の関数でできると思います。    =SUMPRODUCT(B1:B99*D1:D99*E1:E99) =SUMPRODUCT(C1:C99*E1:E99) =SUMPRODUCT(A1:A99*C1:C99*E1:E99) =SUMPRODUCT(A1:A99*C1:C99*D1:D99*E1:E99) =SUMPRODUCT(A1:A99*B1:B99*C1:C99*D1:D99*E1:E99) 注)最大行は99としています。

noname#180098
noname#180098
回答No.2

複数条件でカウントするのでしたら、COUNTIFS関数でしょう。 ただしこれはExcel2007から追加された関数ですから、Excel2003以前を使っているのでしたらSUMPRODUCT関数で代用することになります。このやりかたは有名ですのでご自身で調べて理解した上で使うようにしましょう。幸い各セルに入力されているのは1か0と言うことですので簡単ですよ。 =SUMPRODUCT(B1:B2000,C1:C2000,D1:D2000) とか。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

別の列に=B2+D2+E2等として、3になる行をピボットテーブルで集計する。