- ベストアンサー
エクセル関数(抽出)について
宜しくお願い致します。 A列にランダムな数字が入力されている。(重複する数字はなく、空セルなし) B列にランダムな数字が入力されている。(重複する数字があり、空セルあり) ここで、B列に入力されているA列のセルの数字を全部B列降順に抽出したいのです。(以下のような場合です) A B 1 7 200 2 2 100 3 5 4 3 100 5 8 50 これを以下のようにする方法を教えて下さい。 200 7 100 2 100 3 50 8
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 D、E列に抽出するとします。 D1に、 =IF(COUNT($B$1:$B$10)<ROW(A1),"",INT(LARGE(INDEX($B$1:$B$10+1/(ROW($B$1:$B$10)+1),),ROW(A1)))) E1に、 =IF(COUNT($B$1:$B$10)<ROW(A1),"",INDEX(A:A,ROUND(1/MOD(LARGE(INDEX($B$1:$B$10+1/(ROW($B$1:$B$10)+1),),ROW(A1)),1),)-1)) と入力して、D1:E1を下の行へコピーします。 なお、データ範囲は適宜変更して下さい。
その他の回答 (5)
- macchan1
- ベストアンサー率38% (52/136)
#3の回答にはE列の参照セルに勘違いがありました エラー処理も入れた関数なら以下のように修正してください。 D列:=IF(COUNT(B:B)>=ROW(A1),LARGE(B:B,ROW(A1)),"") E列=IF(COUNT(B:B)>=ROW(A1),INDEX(A:B,MATCH(D1,D:D,0)+COUNTIF($D$1:D1,D1)-1,1),"") ちなみに上記の式はどこの行に貼り付けてもOKです。
お礼
御回答ありがとうございます。 E列が循環になったのが残念です。でも御検討下さりまして感謝致します。
- tresbien
- ベストアンサー率51% (51/99)
Bに数値が重複していますから、逆のそれに対応する数値を抽出するには関数では無理になります。 どうしても自動でセルに書き出したいのであればVBA、又は、作業域を作るなら出来ると思います。 例えば、 C列に =IF(B1="","",B1*10+COUNTIF($B$1:B1,B1)) などのように数値を加工したものをつくり (整数でなかったら別に考える) D列には 「D1」 =IF(ISERROR(LARGE(C:C,ROW())),"",LARGE(C:C,ROW())) で並べ替える。 そしてE列で戻し =IF(ISERROR(INT(D1)/10),"",INT(D1/10)) F列で対応したAの値を書き出す。 =IF(D1="","",INDEX(A:C,MATCH(D1,C:C,0),1)) 100に対応する値がひっくり返ってしまいましたが、あとは良いと思います。
お礼
御回答ありがとうございます。 なるほどVBAという方法もありますね。
- macchan1
- ベストアンサー率38% (52/136)
D列とE列に抽出するなら D列:=LARGE(B:B,ROW(A1)) E列:==INDEX(A:B,MATCH(B1,B:B,0)+COUNTIF($D$1:D1,D1)-1,1)
- ryk1234
- ベストアンサー率40% (46/113)
関数でも何でもないですが… 1.B1からA5を範囲選択(アクティブセルB1) 2.降順で並び替えボタンクリック 求めている事と違っていたらごめんなさい
お礼
御回答ありがとうございます。
補足
その方法は私も知っていますが、関数で実施したいのです。
- sakusaku_panda
- ベストアンサー率31% (5/16)
関数ではなくB列に対してオートフィルタで「空白以外のセル」を選択して。。。 その後B列を降順で並べ替えるのではダメなんでしょうか??
お礼
御回答ありがとうございます。
補足
関数での方法を教えて下さい。
お礼
素晴らしい。まさに求めていたのはこれです。質問の内容は簡単に説明しましたが、実はとんでもなく複雑であり、ポイントは次々と行が足されるためにその都度ソートをかける手間を省きたかったのです。