• ベストアンサー

EXCELで特定の範囲に存在する文字列をカウントする関数

EXCELで特定の範囲に存在する文字列をカウントする関数は=COUNTA()で良いのですが、佐藤、鈴木、鈴木、佐藤、遠藤 と存在した場合に 5ではなく、3とカウントする関数はご存知ないでしょうか?

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

A1~A5に、佐藤、鈴木、鈴木、佐藤、遠藤と入力されているとします。  =SUMPRODUCT(1/COUNTIF(A1:A5,A1:A5)) で重複を除いた件数が計算できます。

taka27189
質問者

補足

理想的ご回答と期待したのですが・・・ COUNTIF(A1:A5,A1:A5)の段階で演算結果が0となってしまい。 =SUMRODUCT(1/0) で エラーとなってしまいます。  何か違っていますでしょうか? 

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

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.7

# 5の解答者です。お礼を頂き有難うございます。私も相当苦労しましたので、意味が難しいとおっしゃっているので、少し 補足します。B列とC列についてです。 (1)DCOUNTA(範囲)は範囲セル内で佐藤が何人いるか数えます。3人いるからB列3です。A2の佐藤(自分)以外は3-2 =2人下行にいる=ダブりあり、と言うことです。C列で-1 しているのは自分の分を引いているわけです。A3の鈴木では 佐藤+鈴木(探索する苗字にプラス=加わることがミソ)が範囲内に6人いると出ているわけです。B2より 3増えたのですが、それは鈴木が3人いるということで、A3の 鈴木を除くと、あと3-2=2人下行にいると言うことになります。数が変化しない行がありますが(例A5の佐藤)、これは 既に前行で佐藤が出てきて(A2に)、自分の名前(A5の佐藤) が増えても、表の中の佐藤+鈴木+山内の数は変わらないことを意味します。こう言う風にして、ダブリ数をD列に出し、最後にD13で合計しています。後は全行数からダブリで増えた行数(D13)を引けば、ダブリ除きの行数が出ます。

taka27189
質問者

お礼

ありがとうございます。 すごい力作と思います。今回はシートがいくつもあって、ちょっと大変な作業になりそうなので別な方法にしました。この関数も非常に参考になり有用と思います。また何かの機会に=DCOUNTA()も利用させて頂きます。ご協力ありがとうございます。

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

>COUNTIF(A1:A5,A1:A5)の段階で演算結果が0となってしまい。 >=SUMRODUCT(1/0) で エラーとなってしまいます。  >何か違っていますでしょうか?  =SUMPRODUCT(1/COUNTIF(A1:A5,A1:A5)) は1つの式です。2つのセルに分解すると、機能しません。

taka27189
質問者

お礼

失礼しました。 ただ、範囲内に文字列がすべて埋まっているとよいのですが、途中で空白のセルがあると#DIV/0 のエラーになるようです。でも、これはすごいですね。セル選択で一度空白セルのみ選択してからスペースでも代入しておけば何とかなりそうです。配列をつかっていると思うのですが、これも理解を超えてしまいました。でもすぐに使えそうです。ありがとうございます。

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

(1)データとしてA2からA12まで名前を入れる。A1名前、B1に0を入れる。 (2)B2に式=DCOUNTA($A$1:$A$12,$A$1,$A$1:A2)をいれる。 最下行が$A$12のところに来る。最下行まで複写する。 (3)C2に式=IF(B2>B1,B2-B1-1,0)をいれる。最下行まで複写 する。 (4)結果は下記の通りとなる。 (5)C13に=SUM(C2:C12)をいれる。 (6)B13に最終行-1をいれる。 (7)D13に=B13-C13をいれる。D13の6が求めるものである。 佐藤、鈴木、山内、山田、大木、大久保の6名。 C列には重複いている名前の数を求めている。 氏名 0 佐藤 3 2 鈴木 6 2 山内 8 1 佐藤 8 0 鈴木 8 0 佐藤 8 0 山田 9 0 大木 10 0 山内 10 0 鈴木 10 0 大久保 11 0

taka27189
質問者

お礼

B13に最終行の11を参照しD13の5を引くと6となり、重複を除いたカウントができるようです。計算式が複雑で小生の理解を超えてますが、これでなんとか行けそうです。ありがとうございます。

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

再びこんにちは。 もうひとつ。 先頭にタイトル行を入れ、フィルタと =SUBTOTAL を使う。 例) タイトル行を含み、A1~A6にデータがあるとして、 =SUBTOTAL(3,A2:A6) とA7にでも入れ、データ-フィルタ-フィルタオプションで「重複するレコードは無視」でフィルタを掛ける。

taka27189
質問者

お礼

subtotal(3,___)は知ってましたが、フィルタオプションで「重複するレコードは無視」は知りませんでした。非常に便利ですね。これも使えます。ありがとうございます。

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

こんにちは。 A1からデータがあるとして、ソートして良いなら、隣りのセルにでも =IF(A1<>A2,1,0) といれて、データ範囲までコピー、それを集計する。 ソートしたくないなら、予めインデックスを振っておいて、上記関数をいれ、結果を値に変えてからインデックスでソートし直すとか。。

すると、全ての回答が全文表示されます。
  • Good-S15
  • ベストアンサー率33% (149/439)
回答No.1

こんばんは。 COUNTIF関数で、検索条件を「*藤」とかでもダメですかね? ダメならば、VBAでMID関数やLEFT関数やRIGHT関数を使用しないとできないのでは?

taka27189
質問者

お礼

想定される名前が不特定なため、今回のものにcountif関数は使用できないようです。ご回答ありがとうございます。

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

関連するQ&A