[[20051025143335]] 『日数を数えたい』(けい) ページの最後に飛ぶ

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

 

『日数を数えたい』(けい)

 A 

 2005/10/01
 2005/10/02
 2005/10/13
 2005/10/01
 2005/10/13
 2005/10/16
 2005/10/01
 のようにA列に日付がバラバラに入っている表があります。
 この中から同じ日付が重複しないように全部で何日か計算したいのですが・・・。

 =SUM(SIGN(FREQUENCY(A1:A7,A1:A7)))とされたらどうでしょう?    (LOOKUP)
   A
1 2005/10/01
2 2005/10/02
3 2005/10/13
4 2005/10/01
5 2005/10/13
6 2005/10/16
7 2005/10/01
8     4

 横からすみません。
 なるほど、こちらのほうが理屈が分かりやすいです。
 =COUNT(0^FREQUENCY(A1:A7,A1:A7))
 前にこのような回答を見つけ、式の意味がわからなかったのですが、
 signを使うという発想は素晴らしいし、覚え易くていいですね。
 (ひよっぴ)

[[20050526155900]] 『カウントについて』(ジーコ)

 =COUNT(0^FREQUENCY(A1:A7,A1:A7))
 こちらの方は、0^0が#NUM!になるので、=COUNT()で数値だけ数えているわけです。   (LOOKUP)

 (T_T)
 すみません、せっかくご説明頂いているのに、どうもピンときてません。。。

 >また仮に行の間に○等の記号が入っている場合、それをカウントしないようにもしたい

 というリクエストがあったから、ということですか?
 ○という文字ではなく数値の0の可能性もあるので?
 確かに、1以上は「^」ですべて1になりますが0はエラーですね。
 でも =0^FREQUENCY(A1:A7,A1:A7) とすると、0が返りますよね。。。
 やっぱりこの式は私には難解かもです。。。(T_T)
 (ひよっぴ)

 =FREQUENCY(A1:A7,A1:A7)でできた配列{3;1;2;0;0;1;0}の0を除く数を数える方法として、
 0^ や SIGN()を使用しているだけで、大差はないのでは、ないでしょうか?   (LOOKUP)

 1  3   0   1
 2  1   0   1
 3  2   0   1
 4  0 #NUM!   0
 5  0 #NUM!   0
 6  1   0   1
 7  0 #NUM!   0
   ↑
  =FREQUENCY(A1:A7,A1:A7)
      ↑
     =0^FREQUENCY(A1:A7,A1:A7)  =COUNT()で数値のみ数える
          ↑
          =SIGN(FREQUENCY(A1:A7,A1:A7)) =SUM()で合計する

 なるほど、配列を試してみると違いがよくわかりました。
 1	3	0	1
 2	1	0	1
 3	2	0	1
 1	0	#NUM!	0
 3	0	#NUM!	0
 6	1	0	1
 1	0	#NUM!	0
 −−−−−−−−−−−−−−−−
 sum計	7	#NUM!	4
 count計	7	4	7

 配列になると場面によって使い分けが必要だけど、
 {}なしの時は、大差がないということで大丈夫ですか?
 レベル低くてすみません。。。
 (ひよっぴ)

 =LOOKUP()は、引数に配列を投入するようになっています。
 =IF()などが加わらない場合には、Ctrl+Enterとする必要はありません。 (LOOKUP)

 LOOKUP関数などはそのようですね。
 配列そのものが、まだぼんやりとしか分かっていないようです。
 まだまだ修行が足りません、がんばります(>_<)
 ありがとうございました。
 (ひよっぴ)

みなさんありがとうございました。
でももうひとつだけ教えてください。↑の方法でうまくいったのですが今度はB列も含めての計算がしたいのですが・・・。
 
   A         B 

 2005/10/01       2005/10/01
 2005/10/02       2005/10/03
 2005/10/13       2005/10/01
 2005/10/01       2005/10/13
 2005/10/13       2005/10/23
 2005/10/16
 2005/10/01
(けい)

 B1:B5をコピーして、A8に貼り付け、=SUM(SIGN(FREQUENCY(A1:A12,A1:A12)))と
 されたらどうでしょう?

 データが全部今年の10月日付でしたら、連続した長方形の範囲でない場合でも

 =COUNT(RANK("9/30"+ROW(1:31),(A1:A7,B1:B5)))として、Ctrl+Shift+Enter。
 のようにすることもできますが。。。                     

 =COUNT(0^FREQUENCY(A1:A7,A1:A7),
 0^FREQUENCY(IF(ISNA(MATCH(B1:B5,A1:A5,)),B1:B5),B1:B5))としてCtrl+Shift+Enter。
 範囲が2箇所でしたら、上のようにも書くことは、できるかもしれません。  (LOOKUP)

 LOOKUPさんご提示の方法を真似て、
=SUM(SIGN(FREQUENCY(IF(A1:B7<>"",RANK(A1:B7,A1:B7)),IF(A1:B7<>"",RANK(A1:B7,A1:B7)))))
とし、Ctrl+Shift+Enterで配列数式として確定。
でも求められました。
(sin) LOOKUPさんの回答は、本当にいつも勉強になります。感謝です!


 定番のやつでも出来そうですが。
=SUM(IF(A1:B7<>"",1/COUNTIF(A1:B7,A1:B7)))
 Shift+Ctrlキー押しながらEnterキーで確定させて配列数式にします。

 (川野鮎太郎)

 指定の対象範囲は、特別な形になっていますね。              (LOOKUP)

 おはようございます。
 A1〜B7の範囲に「範囲」という名前をつけ、
 =SUM(SIGN(FREQUENCY(範囲,範囲)))
 でもうまくいきました(^^)
 (ひよっぴ)

 不思議に思う事が出てきましたので、スレアゲさせていただきます。
昨日のLOOKUPさんの
 >B1:B5をコピーして、A8に貼り付け、=SUM(SIGN(FREQUENCY(A1:A12,A1:A12)))と
 されたらどうでしょう?
に対し、なぜ A1:B7 にしないのかな?と思い、試したところ、#N/Aを表示。
空白セルが原因か?と勝手に思い込み(fxを押した引数のボックスにもN/Aと出てました)、
私も上記の式を書いたりしてみましたが、
今日、ひよっぴさんから名前を付ければ大丈夫!とのレスを見て、なぜ?の疑問が出たのと同時に、
再度 A1:B7 で確かめると、今日はちゃんと答えが出ました。
これって、なぜなんでしょうか? 単純に昨日の入力が間違っていただけなのでしょうか?
(sin) さっぱり訳がわからない。

みなさんありがとうございます。
(ひよっぴ)さんの方法は下記のような形でもできますか?やってみたのですがうまくいかないので。。。
  A         D

 2005/10/01       2005/10/01
 2005/10/02       2005/10/03
 2005/10/13       2005/10/01
 2005/10/01       2005/10/13
 2005/10/13       2005/10/23
 2005/10/16
 2005/10/01
(けい)

コメント返信:

[ 一覧(最新更新順) ]


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