7

このサイトとオンラインでこの質問への回答を探しましたが、まだうまくいっていないので、新しいスレッドで質問します.

数式 (または数式の数) を使用して、Excel のカテゴリごとに特定のテキストの出現回数をカウントできるようにする必要があります。できればこれは VBA を使用せずに実行できますが、必要な場合は VBA コマンドを記述してみます。

これが私が取り組んでいるものです:

Cat.    Word
A       doo
A       foo
A       foo
A       loo
B       loo
B       goo
B       loo
A       roo
A       lol
B       rar
C       goo
...      ...

カテゴリごとに各単語の一意の出現回数をカウントする数式が必要です。カテゴリは既知で有限であり、私の Excel シート内のリストに含まれていますが、単語はいくらでもあり、不明です。各カテゴリには、他のカテゴリに含まれる単語を含めることができ、最終結果は次のようになります。

Cat.    Count of distinct ocurrences per category
A       5
B       3
C       1

最後に、リストを重複排除できることはわかっていますが、アーカイブのためにリストをそのまま残しておきたいので、重複排除を必要としないカウントが理想的です。

これが私がやろうとしたことですが、最終的にはうまくいきませんでした:

=IF(A:A=C1,SUM(IF(FREQUENCY(MATCH(B1:B11,B1:B11,0),MATCH(B1:B11,B1:B11,0))>0,1)))

手伝ってくれてどうもありがとう!

4

4 に答える 4

4

個人的には、ピボットテーブルを使用してそれを行うことを好みます。たまにあるスプレッドシートよりも大きいものについては、MicrosoftAccessまたは他のデータベースのSQLクエリが勝ちます。

于 2012-10-08T19:37:46.463 に答える
4

この「配列数式」を試してください

=SUM(IF(FREQUENCY(IF(A$1:A$11=C1,IF(B$1:B$11<>"",MATCH(B$1:B$11,B$1:B$11,0))),ROW(B$1:B$11)-ROW(B$1)+1),1))

で確認CTRL+SHIFT+ENTER

ここで、C1 はカウントする最初のカテゴリです。すべてのカテゴリの式を下にコピー

説明

式の基本的な考え方は、最初の式はIFA 値 = C1 の場合に B 値のみを確認するための「フィルター」であり、2 番目の式IFは B の空白を除外し、それ以外の場合はMATCHその値の最初の一致の位置を与えるというものです。 Bで(したがって、同じ値に対して同じ数を与える)

の結果は関数IFsの最初の部分ですFREQUENCY。の「ビン」はROW-ROW+1FREQUENCY部分によって形成され、1 から n までの数値の範囲を提供します。MATCH

ここで、IFs によって返される異なる数値の数をカウントする必要があるだけです (これは、基準の B の異なる値の数に等しいため)。式の最後の 1 は、ゼロ以外の各値に割り当てられます。FREQUENCY結果は合計されます。

C1 = A この部分の例の詳細

=IF(A$1:A$11=C1,IF(B$1:B$11<>"",MATCH(B$1:B$11,B$1:B$11,0)))

この配列の結果

{1;2;2;4;FALSE;FALSE;FALSE;8;9;FALSE;FALSE}

col A <> "A" の場合の FALSE 値。それ以外の場合MATCHは、各値の最初の一致の位置を示します。最初に行 2 に foo が 2 回出現するため、2 が 2 回出現することに注意してください。

ROW(B$1:B$11)-ROW(B$1)+1部分はこの配列を提供します

{1;2;3;4;5;6;7;8;9;10;11}

これで、式は次のようになります

=SUM(IF(FREQUENCY({1;2;2;4;FALSE;FALSE;FALSE;8;9;FALSE;FALSE},{1;2;3;4;5;6;7;8;9;10;11}),1))

したがってFREQUENCY、最初の配列の値を関連する「ビン」に入れ、式はこれに解決されます

=SUM(IF({1;2;0;1;0;0;0;1;1;0;0;0},1))

によって返される配列のFREQUENCY合計は 6 (値「A」の 6 行) ですが、基準「A」の 5 つの異なる値を示すゼロ以外の数値は 5 つしかないことに注意してください。

最後の IF はゼロ以外の値ごとに 1 を返し、SUM関数はそれらを合計して 5 を取得します。

于 2012-10-08T18:12:08.340 に答える
2

私もこれについて頭を悩ませてきました。これについて私が見つけた最も簡単な解決策は、ピボット テーブルと単一の数式を組み合わせることです。

  1. ピボット テーブルを作成する
  2. 猫を置きます。列ラベルに
  3. Word を行ラベルに入れる
  4. 値に単語を入れる
  5. B2範囲のあるセルでカウント式を使用B5:B100000し、1 を減算します (ピボット テーブルの下の合計の場合:

    =COUNT(B5:B100000)-1

これはどれほど簡単ですか?

于 2013-03-29T20:36:24.747 に答える
1

簡単な方法 - ピボットを挿入するときにデータ モデル オプションを選択し、値フィールドから個別の値オプションを選択するだけです。これで完了です。

于 2016-07-19T06:20:27.487 に答える