[[20110120164943]] 『数式の理解』(むすたんぐ) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『数式の理解』(むすたんぐ)

 下記の件にて お世話になります。

 Excel2007 Windows 7 の環境です。

 D2:=IF(COUNTIF($B$2:B2,B2)=1,1,"")を下方へコピーしてSUMで足し算してます。

 通常は、↑で計算しています。

 E12: =SUMPRODUCT((B2:B10<>"")/COUNTIF(B2:B10,B2:B10&""))

 ↑の式は、以前こちらのサイトで見まして意味を理解せずに
 活用をしています。(赤面

 私事で恐縮致しますが どうせならば 少しでも理解して活用をしたいという
 希望がありますので E12 の数式を教えていただけないでしょうか。。。
 というのが 質問となります。

	B	C	D	E
 2	佐藤		1	
 3	伊藤		1	
 4	鈴木		1	
 5	井上		1	
 6	山田		1	
 7	伊藤			
 8	木下		1	
 9	山下		1	
 10	渡辺		1	
 11				
 12			8	8

 上級者の方の数式というのは、ビギナーとして感じてます。
 ビギナーとして確認した内容: <>"" 空白と等しくない。 ???
               &"" 空白と結合している。???

 済みませんが…これ以上の事は、現状分からないのです。
 お手数をお掛け致しますが 宜しくお願い致します。

 >ビギナーとして確認した内容: <>"" 空白と等しくない。 ???
 >               &"" 空白と結合している。???

 いずれも、B列に未入力セルがある場合の対策です。

 全セルが埋まっていれば単に → =SUMPRODUCT(1/COUNTIF(B2:B10,B2:B10)) で済んじゃいます。

 やろうとしていることは、
   1つしかない名前は「1」 が1つ、
  2つある名前は  「1/2」が2つ、
  3つある名前は  「1/3」が3つ、
  4・・・
 と云う配列を作り、それを合計すること。

 結果は、重複の無い氏名数と同じになる。

 未入力セルがあるとどうなるかは、そちらで研究してみてください。

 (半平太) 2011/01/20 22:40

 半平太 さん お返事ありがとうございました。

 >いずれも、B列に未入力セルがある場合の対策です
 >全セルが埋まっていれば単に → =SUMPRODUCT(1/COUNTIF(B2:B10,B2:B10)) で済んじゃいます。

 お訪ねして良かったです。これだだけでも参考になりました。入力の手間を省けます。。。
 未入力セルは、ありませんので。。。

 本音を言いますと 「重複無のカウント」だったのですが、どうしても 1ファイルは、
 ちょっと事情があり(突っ込まないでください。^^)、質問した数式で確認してました。

 本来は、作業列の数式やフィルタオプションの重複を防止する。等で対処していたのですが、
 たまたま この質問をした数式を見て試してみてびっくりといった流れがありました。

 私のようなビギナーは、地道に作業列を作成して、なるべく 意味を理解していこう!と強く
 感じました。お返事が遅くなり済みませんでした、ご協力、ご提案に感謝致します。(むすたんぐ)


 このあたりが参考になると思います。配列の概念が分かればご理解頂けると思いますよ。
[[20060906110130]]『ある範囲の中にある数字の種類を数えたい』(おか)
[[20090310154712]]『“延べ”ではないカウント』(かぷち)
[[20040806114257]]『重複データを除いてカウントする』(511)

 (Sei)

	[A]	[B]	[C]
[1]	佐藤		4
[2]	伊藤		
[3]	鈴木		
[4]	佐藤		
[5]	伊藤		
[6]	山田		
[7]			
[8]			
[9]			
[10]

 C1=SUMPRODUCT((A1:A10<>"")/COUNTIF(A1:A10,A1:A10&""))

 1)セルC1を指定して、数式バーの、=SUMPRODUCT((A1:A10<>"")/COUNTIF(A1:A10,A1:A10&"")) の
 2)(A1:A10<>"")を指定して、「F9」をクリックしてください
 3){TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE} のように、データがあるセルは「TRUE」、空白は「FALSE」になります
 4)次に、COUNTIF(A1:A10,A1:A10&"") を指定して、「F9」
 5){2;2;1;2;2;1;4;4;4;4} となり、A1の「佐藤」は「2個」、A3の「鈴木」は「1個」、空白はA7〜A10「4個」です
 6)(A1:A10<>"")/COUNTIF(A1:A10,A1:A10&"") を指定して、「F9」
 7){0.5;0.5;1;0.5;0.5;1;0;0;0;0}は3)を5)で割っています、空白は分子が「FALSE」=0 のため、「0」になります
 8)7)を足すと、「4」となって、種類の数になります

 ◆この式は、途中の空白というより、
 1)範囲を気にしなくていいこと
 2)データの追加に対応できること
 3)複数列でも使用できること  から、よく使用しています

 ◆参考までに、データが数値であればこんな式もあります
 =SUM(IF(FREQUENCY(A:A,A:A),1))
 または、
 =COUNT(1/FREQUENCY(A1:A10,A1:A10))
 (Maron)

 Maronさん 

 こんにちは半平太です。

 > ◆この式は、途中の空白というより、
 これ、私の書いた内容が間違っていると云う意味ですか?
 まぁ、私は「途中の」とは云っていないのですが、そう云った方がより正確でした。

 > 2)データの追加に対応できること
 この意味をご説明いただけませんか?
 あと、Maronさんが使用しているエクセルのバージョンも教えてください。

 (半平太) 2011/01/21 20:07

 ◆(半平太)さん、お久しぶりです
 >◆この式は、途中の空白というより、
 ◆これは、Maronがよく使用している理由です

 >2)データの追加に対応できること
 ◆たとえば、上記の例でA7にデータを追加したときに、式がそのまま使用できます
 (Maron)


 Sei さん お返事ありがとうごじました。

 ご紹介の過去ログも今の私には困難な内容が多数でしたが、、(苦笑
 今の自分にも 最適(?)という内容もあり助かりました。

 過去ログを探すのも スキルの高さなのですね。。。
 自分なんか WEB検索、過去ログを探すのも大変でして。。。
 内容を把握はもっと。。。大変です。参考にしてみます。(むすたんぐ)

 Maron さん お返事ありがとうございます。

 御説明の 1)〜 8)は、手順が詳細に記載されていて凄く分かり易かったです。
 こういう内容になっているのですね。

 嘘をつくのも、苦手ですので(お気を悪くしないでください。)、今の自分には高度だと
 思います。ただ、返信いただいた内容は、将来のためにデータをとり保存しておきます。

 貴重なお時間を私のために費やし、お礼 感謝 致します。(むすたんぐ)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.