Chiquilin Site■09.03.09_Excel:データが何種類あるか数える

その1:ピボットテーブルを使えば……
その2:数値の種類数を数える
その3:文字列を含む種類数を数える
ChiquilinSite
「データが何種類あるか」という単純な質問は思ったほど簡単に計算できなくて悩む人が多い質問の一つだと思います。方法は色々ありますがお勧めの順に書いてみます。とりあえず 今回は Excel2007でいっています。

その1:ピボットテーブルを使えば……

とりあえず 何はともあれピボットテーブルです。使わない理由がありません。
ピボットテーブルの挿入
まずセル範囲を選択してから(範囲を多めにとっても良い)
◆Excel2007の場合:
[挿入]→[ピボットテーブル]→[ピボットテーブル]
◆Excel2003以前の場合:
[データ]→[ピボットテーブルとピボットグラフ レポート]
◆バージョン共通のコマンド:Alt + D → P
ピボットテーブルの作成
[既存のワークシート]を選択し 今回はひとまずC1セルを指定して[OK]
ピボットテーブルのフィールドリスト
表示された項目を[行ラベル]の中に ドラッグで放り込む
※Excel2003以前の場合は[レイアウト]から指定するとやりやすいです。
表示された行ラベルの数を COUNT関数でカウント
■D1セル
 =COUNTA(C:C)-2
以上。D1セルの「-2」は「行ラベル」と「総計」の文字を 件数から外す為です。 Excel2003なら 行フィールドとデータフィールドの両方に項目を放り込んで 同じく行フィールドの件数を数えればいいです。
ページの一番上へ

その2:数値の種類数を数える

もっともお勧めは ピボットテーブルですが 数値に限っての種類数なら 数式でもいいと思います。処理も重くありません。
■C1セル
 =COUNT(1/FREQUENCY(A:A,A:A))
FREQUENCYを別セルに表示させてみれば 仕組みを理解しやすいのではないかと思います。適当なセル範囲を選択して「=FREQUENCY(A1:A10,A1:A10)」と入れて Ctrl + Shift + Enterで確定すれば それぞれの数値に対して どのような結果が返っているいるのか確認できます。
FREQUENCY関数の結果を分解
A1セルの文字列は無視され 順に
A2セルの値「1」→「2」個
A3セルの値「2」→「3」個
A4セルの値「1」→A2と重複しているので「0」個
A5セルの値「3」→「1」個
   ・
   ・
2度目に出てきた数値が「0」と表示されることが分かりますね。この計算結果の配列を分母として 割り算した結果をカウントしています。すると「0」は「#DIV/0!」に それ以外の値は割り算の結果に変換されます。 COUNT関数はエラー値を無視しますから FREQUENCYで返った「0」以外の数値の件数のみを数えることができます。単純そうに見えて 少々複雑な計算式だと思います。よくこんな数式 思いつくもんですね。
ページの一番上へ

その3:文字列を含む種類数を数える

文字数を数える場合 ソート しないで速く処理する方法はありません。作業列を使ってCOUNTIF関数をずらりと並べる人も多いと思いますが 当然ながらこれはこれで重いです。
作業列を使った計算方法
■B1セル
 =N(COUNTIF(A$1:A1,A1)=1)
 フィルハンドルをダブルクリック
■C1セル
 =SUM(B:B)
簡単といえば簡単ですからデータ量が多くないならこれでもいいんじゃないかと思います。処理が重いとか軽いとかは別にしてとりあえずはお手軽です。
 
因みにデータをソートして良ければ ずっと簡単です。
ソートと作業列を使った計算方法
A列を昇順もしくは降順に並べ替え
■B1セル
 =N(A1<>A2)
 フィルハンドルをダブルクリック
■C1セル
 =SUM(B:B)
以上です。これほど単純な話もないですね。この場合に限らず計算はソートをするとしないとで随分と計算のしやすさが違ってきます。ソートも作業列も使わないなら
■C1セル
=COUNT(INDEX(1/(MATCH(A1:A100&"",A1:A100&"",0)=
ROW(1:100)*(A1:A100<>"")),0))
   ・
こんな式などでできます。要は一端文字列ごとの数値に変換してから「その2」の方法と同じように「0」をエラー値に変換してカウントしています。良い方法とは思いませんし特にお勧めもしません。
追加で。データベース関数を使う方法もあります。処理は他と変わらず重いですが手軽だろうと思いますので一応載せます (14.07.07追加)。
先頭(1行目)に1行挿入
■B2セル:条件式
 =COUNTIF(A$1:A2,A2)=1
■B3セル:種類数
 =DCOUNT(A:A,,B1:B2)
以上。条件式のところは フィルタの詳細設定で指定する 検索条件範囲と同じ作りにすればいいです。
ページの一番上へ
ChiquilinSite トップページへ  Copyright(C) Chiquilin_site. All Rights Reserved.
inserted by FC2 system