[[20080130162413]] 『INDEX関数で最大値と同じデータを抽出』(ままん) ページの最後に飛ぶ

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

 

『INDEX関数で最大値と同じデータを抽出』(ままん)
 いつもお世話になってます。過去ログ見たのですが理解できなくて活用できませんでした
 ので、是非お力添えをお願いします!

     C     D     ・・・   M   N   O
    部署 件数 
 6  青森   1       岩手  秋田  3件
 7  岩手   3
 8  秋田   3
 9  山形   2
       ・
       ・
       ・
 20  (20まで続く)

 上記のような表にしたいのです。
 現在は
 M・・・=INDEX(C6:C20,MATCH(MAX(D6:D20),D6:D20,0))
         (各部署の最大値が部署名で表示)
 N・・・???
         (Mと最大値が同じ部署名を表示させたい!)
 O・・・=MAX(D6:D20) 
     (件数の最大値を表示。ちなみに書式設定で「件数」が表示されています)

 今回どうしてもわからない点はNで、どうすれば【秋田】が表示できるのかわかりません。
 過去ログを見るとLARGE関数やSMALL関数を利用してROW関数と組み合わせていますが、
 その仕組みや意味を理解していないため参考にしてもエラーが返ってしまいます。

 17時以降はお返事できませんが、明日参考にさせていただきたいと思いますので、
 皆さん是非宜しくお願いいたします。また、明日付けで退職いたしますので
 間に合わなかったらちょっと心残りになってしまいそうなのでちょっと切羽詰って
 ます笑


 E6に =D6*10+countif(D$6:D6,D6)
下へフィールコピー
で参照すれば


 コメントありがとうございます。ただ簡易版にしてある表ですので申し訳ありませんが、
 DとMの間にもデータが入っているので上記ですとちょっと出来かねます> <;
 もしできればNに関数を入力してなんとかなるのでしたらそちらをご考察いただければ大変助かります。

 質問内容に不備がありすみません。生意気ですが重ねてお願いします。
 (ままん)

 M6=IF(COUNTIF($D$6:$D$20,$O$6)<COLUMN(A1),""
,INDEX($C$6:$C$20,SMALL(IF($D$6:$D$20=$O$6,ROW(A1:A15)),COLUMN(A1))))

 としてCtrlとShiftキーを押しながらEnterで確定、配列数式になります。
 そのまま右にコピーではどうでしょうか。
 ちなみに、

 M6=IF(COUNTIF($D$6:$D$20,MAX($D$6:$D$20))<COLUMN(A1),""
,INDEX($C$6:$C$20,SMALL(IF($D$6:$D$20=MAX($D$6:$D$20),ROW(A1:A15)),COLUMN(A1))))

 で同様に配列数式にすればO6は不要ですし、右にずーっとコピーすれば、
 三つ以上最大値がある場合でも表示できます。
(sato)


 応用の聞かない人ですね   Nに関数を入力でやればいいだけのこと

 この方法は、何度か書いているのですが、人気がなく増殖しないのですが、再度、書いてみました。
 配列数式ではないので、抽出項目に重複がない場合には、有効ではないでしょうか?
 =MATCH()を執拗に繰り返すところが嫌われるのかもしれません。

 M6に=IF(COUNT(D6:D20),MAX(D6:D20),"")。  配置を変更しています。
 N7に=IF(M6="","",INDEX(C6:C20,MATCH(M6,D6:D20,)))。
 O6に
 =IF(N6="","",IF(COUNTIF($N6:N6,"?*")=COUNTIF($D6:$D16,$M6),"",
 INDEX(INDEX($C6:$C20,MATCH(N6,$C6:$C20,)+1):$C20,
 MATCH($M6,INDEX($D6:$D20,MATCH(N6,$C6:$C20,)+1):$D20,))))
 として、AB6までフィルドラッグします。

 というものです。一つ前に抽出したところの先から抽出をしています。         (6UP)
 **** 上の数式で、この部分は、不適切です。
 =IF(N6="","",IF(COUNTIF($N6:N6,"?*")=COUNTIF($D6:$D16,$M6),"",
 =IF(N6="","",IF(COUNTIF($N6:N6,"?*")=COUNTIF($D6:$D20,$M6),"",
 に訂正させてください。 申し訳ありません。        (6UP) 

	C	D	M	N	O	P	Q	……	AA	AB

 5	部署	件数	最大	部署1	部署2	部署3	部署4	……	部署14	部署15
 6	青森	 1	 9	岩手	山形	長野				
 7	岩手	 9			↑					
 8	山形	 9			=IF(N6="","",IF(COUNTIF($N6:N6,"?*")=COUNTIF($D6:$D16,$M6),"",
 9	福島	 5			INDEX(INDEX($C6:$C20,MATCH(N6,$C6:$C20,)+1):$C20,
10	栃木	 6			MATCH($M6,INDEX($D6:$D20,MATCH(N6,$C6:$C20,)+1):$D20,))))
11	群馬	 7		↑						
12	新潟	 8		=IF(M6="","",INDEX(C6:C20,MATCH(M6,D6:D20,)))	
13	長野	 9	 ↑							
	……		 =IF(COUNT(D6:D20),MAX(D6:D20),"")
19	埼玉	 5								
20	東京	 4								


 すみません、表に誤りがあったので修正版アップします。
 M〜Oのデータが6行ではなく5行に入ります。

     C     D     ・・・   M   N   O
 5  部署 件数      岩手  秋田  3件
 6  青森   1       
 7  岩手   3
 8  秋田   3
 9  山形   2
       ・
       ・
       ・
 20  (20まで続く)

 >>satoさん
 アドバイスいただいた関数を上記体裁に合うよう入力してみました。

 =IF(COUNTIF($D$6:$D$20,$O$5)<COLUMN(A1),""),INDEX($C$6:$C$20,SMALL(IF($D$6:$D$20=$O$5,ROW(C6:C20)),COLUMN(A1)))

 とこのようになったのですが、そうするとエラー(#VALUE!)が返ってしまいました。私の修正の仕方で
 おかしな点がありましたらご指示いただけると助かります;

 >>6UPさん
 satoさんの関数をうまく入れられなかったのでこちらでアドバイスいただいたものを自分で調整して
 入力したのですが、こちらも上手く反映されませんでした。たぶん私の修正の仕方がまずいのでしょうが、
 ちょっと関数の意味を理解していない部分もあり、どこが違うのかわかりませんでした・・
 もしこちらを閲覧していましたら関数の説明を少し加えていただければ自分で頑張れそうな気がします!
 お時間がありましたら是非お願いしたいです。
 (ままん)

 表も数式も掲載していますので、まず、このまま、ご確認ください。 (6UP)

 早いレスありがとうございます!今もう一度やってみたのですが、関数入力後Enterを押すと空白
 になりました。これは関数は入力されていますが県名が反映されていないようで、どうしてなのかわかりません;
 ちなみに私が入力したのはこのようになっています。

 =IF(M5="","",IF(COUNTIF($M5:M5,"?*")=COUNTIF($D6:$D20,$O5),"",
 INDEX(INDEX($C6:$C20,MATCH(M5,$C6:$C20,)+1):$C20,
 MATCH($O5,INDEX($D6:$D20,MATCH(M5,$C6:$C20,)+1):$D20,))))

 ※ 表の体裁は先ほど訂正したものと変わりありません。
 (ままん)

 繰り返して申し上げます。
 表も数式も掲載していますので、まず、このまま、ご確認ください。 (6UP)


 このままっていうことは上記をコピーして張り付けるということですか?
【最大】の列が私はOで6UPさんはMとなっていたり
 県名が入る行が私は5行で6UPさんは6行となっていますがいいのでしょうか?

 6UPさんに記入していただいたものをそのままコピー&ペーストしましたが、
 こちらも同様に関数入力後Enterを押すと空白になります。エラーは出ません。

 =IF(N6="","",IF(COUNTIF($N6:N6,"?*")=COUNTIF($D6:$D16,$M6),"",・・・・・
                          ↑こちらはなぜ「16」までの範囲なのでしょうか?
                           「20」ではない理由がまだよくわかりません;
 何度もコメントいただいて本当に助かります!今もたついていますが、頑張りますので宜しくお願いします!

 (ままん)

 IF(COUNTIF($N6:N6,"?*")=COUNTIF($D6:$D16,$M6),"",
 の部分は、誤りで、IF(COUNTIF($N6:N6,"?*")=COUNTIF($D6:$D20,$M6),"",です。
 申し訳ありません。

 しかし、O5に最大値で、N5に2番目の最大値に該当する部署名ということですと、
 ご提示の数式になると思います。当方では、この数式でも期待値が戻っています。
 ですので、元のデータの配置が、掲載のものとは違うのではないかと
 思いまして、上のように書いているのです。            (6UP)

 M5には、=IF(O5="","",INDEX(C6:C20,MATCH(O5,D6:D20,)))があり、
 岩手が表示されていますね?
 これが空白ですと、N5も空白が戻ります。              (6UP)

 ご検討中、横から失礼します。

     C     D     ・・・   M   N   O   ・・・・Z
 5  部署 件数      岩手  秋田  福島
 6  青森   1       
 7  岩手   3                                        2
 8  秋田   3                                        3
 9  山形   2
10  福島   3                                        5

 Z6=IF(D6=MAX($D$6:$D$20),ROW(A1),"")  ※使用しない列ならどれでも(IV列までありますから)
 フィルダウン

 M5=IF(COUNT($Z$6:$Z$20)<COLUMN(A1),"",INDEX($C$6:$C$20,SMALL($Z$6:$Z$20,COLUMN(A1))))
 右方向へフィルコピー

 ※(sato)さんの配列数式を分解?したものです。

 ※最大件数が2個までなら下記で求まるでしょう。 
   M5=INDEX($C$6:$C$20,MATCH(MAX($D$6:$D$20),$D$6:$D$20,0))
   N5=LOOKUP(MAX($D$6:$D$20),$D$6:$D$20,$C$6:$C$20)

  ご参考まで (gon-2)


 >>6UPさん
 M5=IF(O5="","",INDEX(C6:C20,MATCH(O5,D6:D20,)))

 N5=IF(M5="","",IF(COUNTIF($M5:M5,"?*")=COUNTIF($D6:$D20,$O5),"", INDEX(INDEX($C6:$C20,MATCH(M5,$C6:$C20,)+1):$C20, MATCH($O5,INDEX($D6:$D20,MATCH(M5,$C6:$C20,)+1):$D20,))))

 となっていて、M5は岩手が表示されます。でもなぜかN5は空白が返ってしまいます・・

 >>gon-2さん
 アドバイスありがとうございます!今から試してみたいと思いますので、結果が出たらまたこちらに
 書き込ませていただきます!

 ◆追記◆
 gon-2さんの関数を試す今気づいたのですが、私もN5はLOOKUP関数で同じように入力したんです。

 そこで質問したい点があるのですが、このLOOKUP関数だと最大値が同数の県が2つあるとして
 1つはM5に表示させ、もう1つをN5に表示できるんですよね?
 もし同数の最大値がない場合はN5には指定した範囲C列の一番下の県名が表示されてしまうのでしょうか?

 (ままん)

みなさんありがとうございます!!
 お蔭様で解決できました。

 gon-2さんの
 Z6=IF(D6=MAX($D$6:$D$20),ROW(A1),"")  ※使用しない列ならどれでも(IV列までありますから)
 フィルダウン

 M5=IF(COUNT($Z$6:$Z$20)<COLUMN(A1),"",INDEX($C$6:$C$20,SMALL($Z$6:$Z$20,COLUMN(A1))))
 右方向へフィルコピー

 というアドバイスを元にして最大値同数の部署が入るようになりました。
 6UPさんのアドバイスもちゃんと理解したいのでこれから別シートで挑戦していきます。
 6UPさんには最初から最後までお世話になっていたのでこれを自分なりに噛み砕くことでお礼にも
 なればいいなぁと思っています。

 本当にありがとうございました!これで今日心置きなく退職できますw
 仕事から離れるとエクセルに触れる機会も少なくなりそうですが、毎日少しずつ積み重ねていきます☆
(ままん)

 COUNTIF($M5:M5,"?*") は、1ですが、
 COUNTIF($D6:$D20,$O5)
 数式バーのこの部分を選択しF9を押すと何が戻りますか?   (6UP)

コメント返信:

[ 一覧(最新更新順) ]


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