• ベストアンサー

EXCEL 条件付きの種類数の算出

エクセルで、条件にあった列のデータ種類数を算出する計算式(関数)を教えてください。  (A) (B) (C) (1) 日本 関東 東京 (2) 日本 関東 千葉 (3) 日本 関西 大阪 (4) 日本 関西 千葉 A列が「日本」かつB列が「関東」のC列の種類 東京と千葉の2種類なので、答えは「2」 よろしくお願いいたします。

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

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

データは2行目から下方にあるとします。 D2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(D$1:D1,A2&B2&C2)=0,A2&B2&C2,"") A列で検索する文字列をE2セルにB列で検索する文字列をF2セルに入力します。 例えばE2セルに日本、F2セルに関東と入力します。 G1セルには該当検索種類数とでも入力します。 G2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTA(E2:F2)=2,COUNTIF(D:D,E2&F2&"*"),"")IF(COUNTA(E2:F2)=2,COUNTIF(D:D,E2&F2&"*"),"")

HaruXP
質問者

お礼

=IF(COUNTA(E2:F2)=2,COUNTIF(D:D,E2&F2&"*"),"") D列に検索条件用の文字列を作成し、E2とF2で指定した条件の文字列を数えるという事ですね。 D列のデータ生成方法が、なるほど!の一言でした 勉強になりました。ありがとうございます。

その他の回答 (2)

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

ABC列の1234行にデータ E1に日本 F1に関東として ごにゃごにゃやってみたらこんなんなりました。 =COUNT(1/FREQUENCY(IF((A1:A4=E1)*(B1:B4=F1),MATCH(A1:A4&B1:B4&C1:C4,INDEX(A1:A4&B1:B4&C1:C4,0),0)),IF((A1:A4=E1)*(B1:B4=F1),MATCH(A1:A4&B1:B4&C1:C4,INDEX(A1:A4&B1:B4&C1:C4,0),0)))) これをコントロールキーとシフトキーを押しながらEnter。 #ま,こういうのは使えないので使わないでください。ていうか作業列を使わないと,こんなに酷くなくても似たり寄ったりの具合にしかできませんよというお話です。

HaruXP
質問者

お礼

御回答ありがとうございます。 式を理解するのに、苦労してしまいました。 作業列を利用しないで、1つの式であらわすと、このようになるのですね。 なんとかして1つの式で表してみたいと思っていたのですが メンテナンス性を考えると、作業列を利用したほうがよいと、改めて実感いたしました。 勉強させていただきます。ありがとうございました

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 ↓の画像のように作業用の列を2列使っています。 作業列D2セルに =A2&B2&C2 E2セルに =IF(D2="","",COUNTIF($D$2:D2,D2)) として、D2・E2セルを範囲指定しE2セルのフィルハンドルで下へずぃ~~~!っとコピーします。 そして、結果のI2セルには =IF(COUNTBLANK(G2:H2)>0,"",SUMPRODUCT((A2:A100=G2)*(B2:B100=H2)*(E2:E100=1))) という数式を入れています。 尚、100行目まで対応できる数式にしていますが データ量によって範囲指定の領域はアレンジしてください。 以上、参考になれば良いのですが 他に良い方法があれば読み流してくださいね。m(__)m

HaruXP
質問者

お礼

御回答ありがとうございます。 見やすい表まで添付して頂き、お手数おかけ致しました。 KURUMITO様と同様に、作業列を生成してから集計するのが一番シンプルかつ、他者が見ても納得の方法ですね。 やはり、E列の各行ごとに検索範囲が拡張されていく手法が 条件付種類数の抽出方法を求めるポイントなんですね。 勉強になりました。ありがとうございました。

関連するQ&A