[[20040806114257]] 『重複データを除いてカウントする』(511) >>BOT

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

 

『重複データを除いてカウントする』(511)

下記のようなデータがA1:A10に並んでいます。

 ○ 
 × 
 △ 
 ○ 
 △ 
 ■ 
 × 
 ◎ 
 ◎ 
 ■

このとき、マークの種類は、
○×△■◎  の5種類です。
この5を返すにはどうしたらいいのでしょうか。


 =SUMPRODUCT(N(MATCH(A1:A10,A1:A10,0)=ROW(A1:A10)))
こんな感じで求めることが出来ます。
(ケン)


できました。ありがとうございます。
でも説明が悪かったです。
実際のデータは、範囲がB2:D12
みたいに、複数の列にまたがっています。
初めの行が2に変わるのはなんとかなったのですが、
複数列にまたがる場合も教えてください。(511)

 方法は色々あると思いますが、
 先ず、範囲がB2からD12の場合
 どこかに
 =OFFSET($B$2,(CEILING(ROW(A1),3)/3)-1,IF(MOD(ROW(A1),3),MOD(ROW(A1),3),3)-1)
 と入力して「0」がでるまでコピーし不要分を削除します。
 そしたら、ケン様の方法でもいいですし
 そのセルがF2としたら
 G2に
 =COUNTIF($F$2:F2,F2)
 としてハンドルをダブルクリック
 次にSUMIFで
 =SUMIF(G2:G34,1)
 としても求められます。
 で、どうでしょう?
(夏目雅子似)

 =SUM(IF(LEN(B1:D12),1/COUNTIF(B1:D12,B1:D12)))
でCtrl+Shift+Enterで配列数式にします。
(ケン)

 すんごぉぉぉぉ〜い \(@o@)/  !

 _〆\(..;) メモメモ

 最近の私の独り言。。

 しかし世の中には、すごいひとがいるもんだ。。(@_@)

(夏目雅子似)


 少し心配なことがあります。余計なことかもしれませんが、記載させていただきます。

 A1に1、B1に=SUM(1/COUNTIF(A$1:A1,A$1:A1))=1として、Ctrl+Shift+Enter。
 これらを下にフィルドラッグして行きます。
 TRUEが続きますが、B27からFALSEが発生するようになります。

 したがって、この数式の戻り値を、大小比較や=REPT()などの引数に使用する場合には、
 それなりの配慮が、必要なようです。
 =ROUND(SUM(1/COUNTIF(A$1:A1,A$1:A1)),)などとしておかれるのも
 よいかもしれません。                                                 (LOOKUP)

 流石LOOKUPさん、そこまで配慮できませんでした。
(ケン)

 苦し紛れの
=SUM(IF(LEN(B1:D12),3.71993326789901E+41/COUNTIF(B1:D12,B1:D12)))/3.71993326789901E+41
(ケン)

 B1に1、A1に配列数式で、
 =SUM(IF(LEN(B$1:B1),3.71993326789901E+41/COUNTIF(B$1:B1,B$1:B1)))/3.71993326789901E+41=1
 として、これらを下にフィルドラッグしますと、A30、A36、A38などで、FALSEが戻ります。
 このような方法では、解決は困難なのではないでしょうか?          (LOOKUP)

 そっか〜、理屈通りには行かないか〜。
(ケン)

初めの質問に戻ってしまうのですが、A2:A11に下記文字列が並んでいる場合は、
=SUMPRODUCT(N(MATCH(A1:A10,A1:A10,0)=ROW(A1:A10)))
を使用すると「0」になるのですが、上記関数は1行目からでないと
使用できないのでしょうか?よろしくお願いします。
(ひで)

 そんなことはないでしょう?
 =SUMPRODUCT(N(MATCH(A2:A11,A2:A11,0)=ROW(A1:A10)))
 で、どうでしょう?
 (夏目雅子似)

出来ました!!ありがとう御座います。
でも最後の)=ROW(A1:A10)がA1:A10にするのは何故ですか?
よろしくお願いします。

 以前ここで説明しました。
[[20040205133124]]『人数を数えたい』(はな)
(ケン)

 衝突しましたぁ。。
 せっかく書いたので載せておきます。。
 配列数式を理解する時は式をバラバラにするとわかりやすいですよ。
 例えば今回の場合は、
 A2からA11にデータがあるとして、
 C2に
 =MATCH($A$2:$A$11,$A$2:$A$11,0)
 D2に
 =ROW(A1)
 E2に
 =IF(C2=D2,1,"")
 と入力してそれぞれを下へコピーします。
 結果
 E列の合計が今回の求める結果となりんすでごじゃる。
 下手な説明ですけど、どうでしょう?
 結局10個の配列に対して10個の連番が欲しいんですよね。。
 うん?あってるかなぁ(^^;; ヒヤアセ(^^;; ヒヤアセ

 配列数式はやっぱりここでしょ?
http://pc21.nikkeibp.co.jp/special/hr/
 (夏目雅子似)


今更ながら、どなたかご教示ください。
上記で出てきた関数でレコード数をチェックしているのですが、リストの中盤からカウントしたい場合、何故か結果が「0」になります。

これはどうしようもないのでしょうか?


 ↑この質問は、2008/07/24(木)14:00の投稿です。

 具体的な配置と数式を掲示してみてください。

 (川野鮎太郎)2008/07/25(金)18:12 


上記の質問は、以下の数式です。得られた結果は「855」とそれらしい数字になりました。
=SUMPRODUCT(N(MATCH(C2:C1383,C2:C1383,0)=ROW(C2:C1383)-1))

レコードの配置は、1レコード目が項目名になっており、それ以下、A〜Lまでそれぞれデータが入っております。
このデータの中で、2〜17レコードは検証不要なため、以下の数式を入力しました。
=SUMPRODUCT(N(MATCH(B17:B1383,B17:B1383,0)=ROW(B17:B1383)-1))
このとき、BとCは全く同じデータが入っております。得られた結果は「0」です。


 >結果は「855」とそれらしい数字になりました。
 > =SUMPRODUCT(N(MATCH(C2:C1383,C2:C1383,0)=ROW(C2:C1383)-1)) 
                 ↑            ↑
               2行目から検索しているので、「1」を引いてMatchの結果と合わせるようにしています。

  =SUMPRODUCT(N(MATCH(B17:B1383,B17:B1383,0)=ROW(B17:B1383)-1)) 
                 ↑            ↑
                17行目から検索するなら、1ではなく「16」にする必要があります。

  (半平太)



ありがとうございます。
いわれてみれば、当然ですね。


 もう見られないかもしれませんが、書き込みの際は毎回HNの記入をお願いします。

 (川野鮎太郎)

コメント返信:

[ 一覧(最新更新順) ]


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