• ベストアンサー

excel関数で教えてください。

    A   B   1  12345 2  23456 3  12345 4  44556 6  44556 7  55667 8  88990 9  12345  10       11  5件 ---------------------------------------------- おはようございます。 上記のように数値が入力されているシートがあります。 11行の「5件」を求めたいのですが、うまくできません。 ※条件※ (1).同じ数値(または文字列)の場合は、重複を求めて1件とします。 (2).10行のように空白セルはカウントしない。 個別に求める事は出来たのですが、なんとか複合系で算出したく 投稿いたしました。 お知恵を貸してください。お願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.10

こんにちは。 こんな方法もあります。 =SUMPRODUCT((MATCH(A1:A10&B1:B10,A1:A10&B1:B10,0)=ROW(A1:A10))*NOT(ISBLANK(A1:A10))) ------------------------------------------- ここでは空白判定は、A列だけにします。A列B列判定するには、NOT(ISBLANK(A1:A10)))を ((A1:A10&B1:B10)<>"")に置き換えればよいです。 ------------------------------------------- 配列数式は、トリッキーで、掲示板の解答特有のものだと思います。 解くのは面白いけれども、これらは、いくつかの解法のパターンがあります。それを覚えれば可能なものの、むつかしいことを考えないで、補助列・作業列を使って、C列に作った数式 =A1 & B1 を、=(COUNTIF($C$1:C1,C1)=1)*(C1<>"")で、オートフィルでコピーして、それを合計すればよいと思います。 ただし、単純なVBAのコードでは解けないもので、配列数式では可能なものもあります。

すると、全ての回答が全文表示されます。

その他の回答 (9)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.9

補助列を使わずにA列とB列の組み合わせデータで重複のないデータ数を表示するなら、たとえば以下のような関数を使用します。 =COUNT(1/(MATCH(A1:A10&B1:B10,A1:A10&B1:B10,0)=ROW(A1:A10)))-(SUM((A1:A10&B1:B10="")*1)>0) 配列数式にするため、入力後Ctrl+Shift+Enterで確定してください。

fit333
質問者

お礼

MackyNo1様 満足できる結果が得られました。 色々とご教授頂きありがとうございました。

すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.8

A11セルには次の式を =SUMPRODUCT((C1:C10<>"")/COUNTIF(C1:C10,C1:C10&"")) C11セルには次の式を入力します。 =COUNTIF(C1:C10,"?*")-SUMPRODUCT((C1:C10<>"")/COUNTIF(C1:C10,C1:C10&""))

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 条件的には、 ------------------------------------------- C列を集計データとする =A1 & B1 A列 には、日付データが入る。 空白値は、B列で判定させる。(A列は、日付が入るという条件から) B列は空白か文字列か数字。空白は、文字空白("")を用いない。 エラー値は入れない。 ---------------------------------------- COUNTIF 関数 =SUMPRODUCT((COUNTIF(OFFSET($C$1,,,ROW($A$1:$A$10),),C1:C10)=1)*($B$1:$B$10<>"")) MATCH 関数 =SUMPRODUCT((MATCH($C$1:$C$10&"",$C$1:$C$10,0)=ROW($C$1:$C$10))*($B$1:$B$10<>"")) 移動のときの注意 *ROW($C$1:$C$10)の部分は、高さを示すから、必ず、1から始まる。 失敗例: 重複の合計から、COUNTBLANK関数で引く場合は、1個の場合は良いけれども、2個以上の場合は数がずれてしまいます。 ×=SUMPRODUCT((MATCH(C1:C10&"",C1:C10,0)=ROW(C1:C10))*1)-COUNTBLANK(B1:B10)

fit333
質問者

お礼

Wendy02様 ありがとうございました。 MATCH関数があるなんて知りませんでした。 多数の方から、教えていただいたので一番合ってる関数 を使わせていただきます。

すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

参考までに wisemac21さんの数式は、数字以外のデータが混ざっている場合にも対応できますが、今回の条件の空白セル含まれる場合に対応できません。 =SUMPRODUCT(1/COUNTIF($A$1:$A$8,A1:A8))        ↓ =SUM(IF(A1:A10="","",1/COUNTIF(A1:A10,A1:A10))) 上記のように変更してCtrl+Shift+Enterで確定するのがよいと思います。 Ctrl+Shift+Enterで確定しないでも計算できる配列数式にするならたとえば以下のような数式になります。 =SUMPRODUCT(1/COUNTIF(A1:A10,A1:A10&""))-(COUNTBLANK(A1:A10)>0) ちなみにedomin7777さんの数式で該当しないデータをエラーにする方法の場合は以下のように単純にFREQUENCYで求められる配列を0や1の数字で割り算したほうがわかりよいような気がします。 =COUNT(1/FREQUENCY(A1:A10,A1:A10))

fit333
質問者

お礼

↑間違いです。 --------- |11 |  6件 |   |      でした。 お礼のフォームを使わせてもらいました。 ごめんなさい。

fit333
質問者

補足

MackyNo1様 有難うございます。 難しすぎて僕にはサッパリです(^^; どうせ考えても理解できないので、コピーして使わせていただきます。 ついでに、お聞きしたいのですが ↓     A      B    C      1  12345   田中  12345田中 2  23456   山本  23456山本 3  12345   木村  12345木村 4  44556   山本  44556山本 6  44556   山本  44556山本 7  55667   鈴木  55667鈴木 8  88990   木村  88990木村 9  12345   田中  12345田中 10       11          重複2件   上記のようにできるでしょうか? (1).AとBの範囲で重複をカウント。 (2).空白はカウントしない。 です。 Cのセルは作業用でA&Bで結合しました。そのほうが やりやすいと思ったのですが、 10行目の空白列で重複扱いになってしまいます。 (Aのセルは、「日付型」です。) よろしくお願いします。  

すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

次のようにすることで作業列も使わずに空白行があっても対応できます。 =SUMPRODUCT((A1:A10<>"")/COUNTIF(A1:A10,A1:A10&""))

fit333
質問者

お礼

KURUMITO様 有難うございました。 また、困ったらご教授くださいませ。

すると、全ての回答が全文表示されます。
  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.4

作業列を使わず =SUMPRODUCT(1/COUNTIF($A$1:$A$8,A1:A8))

fit333
質問者

お礼

wisemac21様 返事遅くなってごめんなさい。 勉強になりました。またよろしくお願いします。

すると、全ての回答が全文表示されます。
  • st_comp
  • ベストアンサー率41% (16/39)
回答No.3

1. B列にIF(COUNTIF($A$4:A9,A9)>1,"重複","") などの数式を入れて、一度列に出た数値に重複マーカーをつける。 2. A列をカウント 3. B列から重複マーカーをカウント 4. A列のカウント値からB列の重複マーカー値を引く 以上でいかがでしょう。 実際運用時はマーカーは計算エリアにでも入れて非表示にすればいいかと。

fit333
質問者

お礼

st_comp様 ありがとうございます。 助かりました。正月明けにすぐ使えないと部長に かみなりでした。^^; お礼の場所を間違っておりました。

fit333
質問者

補足

st_comp様 ありがとうございます。 助かりました。正月明けにすぐ使えないと部長に かみなりでした。^^;

すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 色々方法はあるかと思いますが・・・ 一例です。 ↓の画像のように作業用の列を使わせてもらいます。 B2セルに =IF(COUNTIF($A$2:A2,A2)=1,1,"") という数式を入れ、オートフィルで下へずぃ~~!っとコピーします。 そして、A11セルは単純に =SUM(B2:B10) としています。 (数式の範囲指定領域はデータ量によってアレンジしてください。) 以上、参考になれば幸いですが、 他に良い方法があれば 読み流してくださいね。m(__)m

fit333
質問者

補足

tom04様 ありがとうございます。 上手く処理できそうです。 excelって奥深いですね また、よろしくお願いします。

すると、全ての回答が全文表示されます。
  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

=COUNT(FREQUENCY(A1:A10,A1:A10)^0) で算出できます。

fit333
質問者

補足

edomin7777様 こんな関数でも出来るんですね。 試してみます。 有難うございました。

すると、全ての回答が全文表示されます。

関連するQ&A