範囲内の異なる値の数をカウントする方法は?


32

フィルターなどを使用して既に整理された大きなテーブルがあります。特定の列の下に、その列の個別の値の数を含む要約を追加したいと思います。

機能がない=COUNTDISTINCT(A2:A100)ので、代わりに何ができますか?(Excel 2003)

テーブルやフィルタリングを変更したくないので、この同様の質問に対する答えを正確に使用することはできません。変更ではなく、ワークシートに追加する必要があります。

回答:


31
=SUMPRODUCT((A2:A100 <> "")/COUNTIF(A2:A100,A2:A100 & ""))

配列式を使用せずにそれを行います。


4
どのように/なぜこれが機能しますか?
–RBarryYoung

4
@ RBarryYoung、SUMPRODUCTは配列関数ではなく、配列関数のように機能します。ここで使用されていることよりもはるかに多くのことができますが、ここでは列のすべてのインスタンスをチェックし、列内の反復回数に基づいて個別の値ごとにスケーリングされた値を見つけています。したがって、「a」のインスタンスが2つある場合は、1/2と1/2を加算して1を取得します。したがって、個別の値ごとに、合計に1を加算します。
ランスロバーツ

1
これは私が問題を抱えている部分です:「列にある反復の数に基づいて、個別の値ごとにスケーリングされた値を見つけます。」これを理解すれば、SUMPRODUCTはfor each [i] in A2:A100 DO:{ sum += (([i]<>"")/COUNTIF(A2:A100,[i])) }、 ?私はそれが条件と第二COUNTIFパラメータの両方を列挙するために知っている方法を理解少し問題が発生したが、午前ない第一COUNTIFパラメータ?このDWIM-magicは、MSによってどこでも文書化/説明されていますか?これらを意図的に書く方法を知っておくといいでしょう。
–RBarryYoung

1
はい、わかりました。通常は単一の値になるように配列を反復処理し、すべてのパラメーター(この場合は1)を乗算し、反復を追加します。SUMPRODUCTは非常に複雑になる可能性がありますが、Excelで最も便利な機能の1つであり、文字通りの奇跡を起こすことができます。
ランスロバーツ

4
入力に空白のエントリが含まれている場合、これは失敗します。YouTubeでデモされた簡単な修正は次のとおり=SUMPRODUCT((A2:A100<>"")/COUNTIF(A2:A100,A2:A100&""))です。これにより、COUNTIF空行に対して0が返されなくなり、DIV/0エラーが発生します。
cfi

7

ここ解決策を見つけましたが、これはそれを解決するための信じられないほどの迂回方法と思われます。しかし、ちょっと、それは動作します...

= SUM(IF(COUNTIF(A2:A100、A2:A100)= 0、 ""、1 / COUNTIF(A2:A100、A2:A100)))

次にCtrl+ Shift+ を押しEnterます。押すだけでEnter間違った結果が得られます。


他の答えが見たいです!これを解決するより良い方法はありますか?
トーベンGundtofte・ブルーン

1
いいえ、それが最良の方法です。なぜそこにIFがあるのか​​分かりません。入力した= SUM(1 / COUNTIF(A2:A100、A2:A100))配列を使用できます
dkusleika

2
@dkusleika IFはゼロ除算エラーを防ぐために存在しているようです。上記にリンクされているページで説明したように、範囲に空白のセルが含まれる場合はこれが必要です。そうでない場合は、IFを省略できます。
Bavi_H


1

この記事では、テキスト値についてこれを示します。

=SUM(IF(FREQUENCY(IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""), IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""))>0,1))

数値の場合:

=SUM(IF(FREQUENCY(C3:C25, C3:C25)>0,1))

この記事では、同様の式を示しますが、フィルターを使用する方法も示します。

フィルターを使用して一意の値の数を数える

拡張フィルターを使用して、データの列から一意の値を抽出し、新しい場所に貼り付けることができます。次に、ROWS関数を使用して、新しい範囲内のアイテムの数をカウントできます。

  1. 列の最初の行に列ヘッダーがあることを確認してください。
  2. [データ]メニューの[フィルター]をポイントし、[高度なフィルター]をクリックします。
  3. [詳細フィルター]ダイアログボックスで、[別の場所にコピー]をクリックします。
  4. カウントする範囲がまだ選択されていない場合は、[リスト範囲]ボックスの情報を削除してから、データを含む列をクリックします(または範囲を選択します)。
  5. [コピー先]ボックスで、ボックス内の情報を削除するか、ボックス内をクリックしてから、一意の値をコピーする空白の列をクリックします。
  6. [一意のレコードのみ]チェックボックスをオンにして、[OK]をクリックします。

    選択した範囲の一意の値が新しい列にコピーされます。

  7. 範囲の最後のセルの下の空白のセルに、ROWS関数を入力します。引数としてコピーした一意の値の範囲を使用します。たとえば、一意の値の範囲がB1:B45の場合、
    = ROWS(B1:B45)を入力します。


1

= SUM(1 / COUNTIF(A2:A100; A2:A100))

Ctrl + Shift + Enterで確定

セルごとに、それが発生した回数をカウントし、これらすべての値の逆数を合計します。いくつかの文字列または数のオッカスを5回仮定します。その逆数は0.2で、5回合計されるため、1が加算されます。最後に、異なる値の数を提供します。

注:空白が発生すると機能しません!


0

このリンクを試してください。これは、空白セルを省略してリスト内の一意の値をカウントする方法を示しています。

http://www.functioninexcel.com/lists-arrays/count-unique-values-in-a-list/

= sum(if(frequency(match(List、List、0)、match(List、List、0))> 0、1))

「リスト」は、たとえばセルの範囲です。

リスト= $ A $ 2:$ A $ 12 OR-リスト= offset($ A $ 1 ,,, match(rept( "z"、255)、$ A:$ A))-OR-リスト= offset($ A $ 1、 ,, match(value(rept( "9"、255))、$ A:$ A))


0

= SUM(IF(FREQUENCY(IF(SUBTOTAL(3、OFFSET(A2:A100、ROW(A2:A100)-ROW(A2)、0,1))、MATCH( "〜"&A2:A100、A2:A100& " "、0))、ROW(A2:A100)-ROW(A2)+1)、1))

この数式を貼り付けた後、必ずCONTROL + SHIFT + ENTERを押してください。これはA2:A100の範囲用で、それに応じて範囲を調整します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.