プロが教えるわが家の防犯対策術!

お世話になります。
エクセルで図のような買物履歴の表があるとします。
表のうち、一度に10,000円以上の買物をしたことがある男性の人数を、重複を除いて数えたいのですが、何か良い方法はないでしょうか?
作業列を使えるならば、D2のセルに
=AND(B2="男",C2>=10000,COUNTIFS(A$2:A2,A2,B$2:B2,"男",C$2:C2,">="&10000)=1)
として、それをD9までコピーをして、TRUEの数を数えればよいわけですが、実際には様々な条件で件数を数える必要があるため、いちいち作業列を追加することはできない状況にあります。
SUMPRODUCT関数を使おうにも、
=SUMPRODUCT((B2:B9="男")*(C2:C9>=10000)/COUNTIFS(A2:A9,A2:A9,A2:A9,">="&10000))
とすると、0で割ることになってしまい、#DIV/0!となってしまいます。
なにかよい方法はないでしょうか?
できれば、VBAも使わないで関数だけで求められると助かります。

「エクセルで作業列を使わず特定の条件を満た」の質問画像

質問者からの補足コメント

  • 皆さん色々な解法をありがとうございます。
    私自身も質問してからいろいろと試行したところ、SUM関数の配列数式とIF関数を組み合わせることで、欲しい値を導くことができました。
    式は
    {=SUM((B2:B9="男")*(C2:C9>=10000)/IF(COUNTIFS(A2:A9,A2:A9,B2:B9,"男",C2:C9,">="&10000),COUNTIFS(A2:A9,A2:A9,B2:B9,"男",C2:C9,">="&10000),1))}
    です。
    分母が0の時は1にすることで、条件を満たさない行の計算を0/0から0/1にして、エラーが出ないようにしました。

    因みにSUMPRODUCT関数で同じような式をたてても、うまく行きませんでした。
    SUMPRODUCT関数とSUM関数の配列数式は同じようなものだと思っていたのですが、IF関数を使えるか否かという違いがあったのですね。

      補足日時:2016/01/10 00:30

A 回答 (5件)

[No.2お礼]へのコメント、


タイトルにも明記されていた「重複を除いて」を見落としていました。

「作業列を使わず」ともあるので、私にはそれを満足する能力はナシです。
ただし、何処でも好い、遠い彼方の僅か2個のセルだけのご使用を許可いただけるなら、次のように[フィルタオプションの設定]を利用して、チョー簡単に実現できそうです。ご一考ください。

1.範囲 A1:B1 を[コピー]してセル E1 に[貼り付け]
2.何処か邪魔にならない場所(此処では 範囲 H1:H2)の
  上のセル H1 は空白のままに放置して、下のセル H2
  に式 =C2>=10000 を入力
3.次の条件で[フィルタオプションの設定]を実行した
  結果を添付図に示しました。
   抽出先→ 指定した範囲
   リスト範囲→ $A$1:$C$9
   検索条件範囲→ $H$1:$H$2
   抽出範囲→ $E$1:$F$1
   “重複するレコードは無視する”にチェック入れ
最後の「チェック入れ」がミソです!
「エクセルで作業列を使わず特定の条件を満た」の回答画像5
    • good
    • 0

様々な条件にもよりますが、ピボットテーブルを作成してから考えてはいかが?



データの追加削除に対応するため、[Ctrl]+[F3]名前の定義
名前 桜
参照範囲 =$A$1:INDEX($C:$C,COUNTA($A:$A))


データ-ピボットテーブル
使用するデータの範囲
=桜

列フィールドに 性別
行フィールドに 人物
データフィールドに 代金(最大値にする)
様々な条件にもよるけど 平均や最小値なども可能です

添付図通りにできたら
=COUNTIF(G3:G6,">=10000")
条件部分は
=COUNTIF(G3:G6,">="&J1) のようにセル参照も可能です

データの変更があったらピボットテーブルで「!データの更新」します
「エクセルで作業列を使わず特定の条件を満た」の回答画像4
    • good
    • 0
この回答へのお礼

なるほど、ピボットテーブルはほとんど使うことがありませんでしたが、これなら条件が変るごとに作業列を作るよりは、遥かに手軽に処理ができますね。

ただ、できれば関数だけで、セルも余り使わずに数値を求めたいのですが、難しいですかね

お礼日時:2016/01/08 23:41

[No.2]への補足、


ステップ4に提示した2つの式は、それぞれ次式でもOKです。
F3: =SUMPRODUCT((INDIRECT($B1)=F2)*(INDIRECT($C1)>=E3)*1)
F7: =COUNTIFS(INDIRECT($B1),F6,INDIRECT($C1),">="&E7)
    • good
    • 0

1.範囲 A1:C9 を選択


2.[数式]→[定義された名前]→[選択範囲から作成]を実行
3.“上端列”だけにチェックを残して[OK]をツン
此処からは添付図参照
4.セル F3 に次式を入力して、此れを右にオートフィル
  =SUMPRODUCT((性別=F2)*(金額>=E3)*1)
  または、
  セル F7 に次式を入力して、此れを右にオートフィル
  =COUNTIFS(性別,F6,金額,">="&E7)
「エクセルで作業列を使わず特定の条件を満た」の回答画像2
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ですが、この式はAを2件として数えています。
私が求めたい重複を除いた数値というのは、10,000円を超える購入履歴のあるAとCで2人です。

お礼日時:2016/01/08 22:59

Vlook count if などを組み合わせてできそうです。

試してません。
あとは、VBAを使う。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!