• ベストアンサー

エクセルの関数

A列に約500行に渡ってランダムに5桁の数字(10000~99999でこの間抜けている数字はある)があります。(重複する数字はありません。)  ここで、例えばB列にA列にある30000~39999までの該当する数字をB1、B2、B3・・・・と該当する数字だけ昇順に全部抽出したいのですが、この場合の式を教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

#5 Doragonfang です。補足です。 >ただ、1行目にしないと正当に抽出しないんですね。 SAMLL関数の順位を指定する2番目の引数を ROW()関数で得ているからでしょう。 上から順に1、2、3と数字を入れていっても良いのですが、そんな迂遠な方法は意味がないので、出来るだけ簡単に1からの順番を得るためにこうしました。 ROW()関数は引数を指定しないと、自分自身のある行番号を数字で返します。 なので、この場合はB1セルでは、"1"、B2セルは"2"、・・と返しています。 したがって、たとえば、5行目から正常に表示されるのには5行目を"1"にしないといけないので、5-1=4 で、ROW() の部分を ROW()-4 と置き換える必要があります。 その例でいくと、 =IF(SUMPRODUCT(($A$1:$A$500<40000)*1)-SUMPRODUCT(($A$1:$A$500<=30000)*1)>=ROW()-4,SMALL($A$1:$A$500,SUMPRODUCT(($A$1:$A$500<=30000)*1)+ROW()-4),"") という式になります(2カ所変更しています)。

その他の回答 (5)

回答No.5

#4 Doragonfangです。訂正です。 #4だと降順になってしまいます。昇順でしたね。済みません。 B1に入れる式を次のにして、B2以下にコピーしてください。 =IF(SUMPRODUCT(($A$1:$A$500<40000)*1)-SUMPRODUCT(($A$1:$A$500<=30000)*1)>=ROW(),SMALL($A$1:$A$500,SUMPRODUCT(($A$1:$A$500<=30000)*1)+ROW()),"") SMALLにします。

yukai4779
質問者

お礼

御回答ありがとうございます。まさにこれです。ただ、1行目にしないと正当に抽出しないんですね。  皆様御回答ありがとうございました。この場をお借りしまして御礼申し上げます。

回答No.4

少々複雑ですが、一発で出来る式を考えてみました。 B1セルに次の式を入力し、B2以下必要分(最大A列のデータ分)、コピーしてください。 =IF(SUMPRODUCT(($A$1:$A$500>=30000)*1)-SUMPRODUCT(($A$1:$A$500>39999)*1)>=ROW(),LARGE($A$1:$A$500,SUMPRODUCT(($A$1:$A$500>39999)*1)+ROW()),"") A列の範囲($A$1:$A$500)はデータ数に合わせて適宜変更してください。 SUMPRODUCT(($A$1:$A$500>=30000)*1) の意味は、A列のデータで、30000以上の数字の個数を求めています。*1が付いているのは、($A$1:$A$500>=30000)の比較文だけだとTRUEかFALSEが返って、式が0になってしまうため、*1で数字("1")にしています。 あとは式を見て頂いたら分かると思いますが、 IFは30000以上の数字の個数から40000以上の数字の個数を引いて、30000~39999の間の個数を求め、その個数以上は表示しない(""を表示する)ようにするためです。 そして、LARGE関数で、40000以上の数字の個数+1目から、順に30000以上まで表示すればいいので、ROW()関数で1,2,3,4,5・・・の数字を得るようにしています。 たぶん、これでいいと思いますが、いかがでしょう?

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

配列数式と言うもので一発で出きるようです。初めは半信半疑でしたが、こういう場合、配列数式の威力がすごいと思いました。 (データ)A1:A14 30000 30023 40002 20002 30234 30037 60001 50034 10011 32930 90234 40000 35555 30001 (関数式) B列で適当の行数を範囲指定して B1に=SMALL(IF(($A$1:$A$15>=30000)*($A$1:$A$15<40000),$A$1:$A$15,""),ROW()) といれて、SHIFTキーを押しながら、CTRLキーを押しつつ ENTERをいれる。式の先頭と後尾に{と}が付く。 A15の15は最終行より下であれば良い。 (式をOKWEBからコピーする場合B1に式を貼りつけ、数式バー部の式の最後をクリックしてSHIFTキーを押しながら、CTRLキーを押しつつ、ENTERをいれる。そしてB1で+ハンドルを出して下方向へ引っ張り、#Num!が出たら止める。 (結果) 30000 30001 30023 30037 30234 32930 35555

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

No.1です。不親切な回答でした。補足します。 500行ということで、No.1の方法を試される場合、B1セルの計算式を500行分オートフィルして下さい。 30000~39999の範囲にない数値がA列にある場合、B列には0が返り、範囲内の数字はそのままの値が返ります。B列に得られたその結果を、昇順ソートをかけ、0の値をもつセルを削除すれば、ご希望どおりの結果が得られるかと思います。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

B1セルに計算式 =IF(AND(A1>=30000,A1<=39999),A1,0) として、結果をコピー&値で貼り付けし、ソートします。0はセルごと削除。 でどうでしょう?

関連するQ&A

  • エクセル関数(抽出)について

    宜しくお願い致します。 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

  • エクセル関数(抽出)について

    宜しくお願い致します。 A列にランダムな数字が入力されている。(重複する数字はない) B列にランダムな数字が入力されている。(重複する数字がある) ここで、A列のセルの数字をB列の任意値分全部抽出したいのです。    A   B 1 815  9 2 330  8 3 209  6  4 110  9  5  24  9 6 782  5 7   3  9 これを以下のようにする方法を教えて下さい。 9 815 9 110 9  24 9   3 ※このA列の”9”もセルの中で指定したいのです。

  • エクセルの検索・関数

    お分かりの方、教えて下さい!! エクセルにて、 A列に13桁の数字がランダムにあり、 C列にも13桁の数字がランダムにあり、 E列には1桁~3桁の数字がランダムにあります。 B列に同じ行のA列の13桁と一致するC列の13桁を見つけ、 そのC列のと同じ行のE列の数字を入れたいのです。 上記の内容が出来る関数を教えて下さい。 分かりにくくてすみませんが、よろしくお願いいたします。

  • Excel特定の文字列を抽出する関数を教えてください。

    A列に***AAA/2桁の数字***と言う値があります。 *はランダムです。 2桁の数字もランダムです。 AAA/2桁の数字のみを抽出する関数を教えてください。 重複する値は、1つを残して削除したいです。 よろしくお願いします。

  • エクセルで複数列に共通した項目の抽出方法

    エクセルで複数列で重複したセルを抽出する方法がわかりません。 具体的には、ABC各列にランダムな6桁の数字がそれぞれ500行づつあり、AとB列で重複(同じ)数字があれば、D列に列挙(重複した個数ではなく、たとえば310257などと重複していた数字)し、またABCの3列ともに重複している数字をE列に列挙するなど、複数列で重複したセルを抽出するにはどういう方法があるんでしょうか?

  • エクセル関数で教えてください。

    例えば、A列の1行目からA列の100行目まで社員の名前が重複せずに100人分あります。B列1行目からW列100行目までにランダムに数字が入っています。数字は重複していません。この、数字(例えば5という数字)のセルの場所を特定したいのですが、関数でこの場所を特定する方法を教えていただけませんか? 結果的に必要なのは、5という数字が何行目にあるかだけですので、それだけ分かれば良いのですが。良い方法が見つかりません。 今回はマクロは一切使わない条件です。よろしくお願いいたします。

  • エクセルのIF関数について

    エクセルのIF関数について質問をさせて頂きます。 現在、下記のような条件で抽出できる式を考えているのですが、 中々思うような式が思い浮かびません。 例えば、     A列  B列  C列  D列 1行目  111 2行目  222 3行目  333 4行目  444 5行目  555 6行目  666 7行目  777 8行目  888 9行目  999 上記のようなシートがあったとして、     A列  B列  C列  D列 1行目  111       999 2行目  222       333 3行目  333   ○   123   × 4行目  444 5行目  555 6行目  666 7行目  777 8行目  888 9行目  999   ○ 上記のように、例として C列の1行目に「999」と入力した場合、A列の9行目に「999」の数字があるので、その横のB列に「○」 C列の2行目に「333」と入力した場合、A列の3行目に「333」の数字があるので、その横のB列に「○」 C列の3行目に「123」と入力した場合、どこにも該当番号がないので、入力したC列の横、即ちD列の3行目に「×」を表示 要は、A列のどこかに該当数字があった場合にはその数字の横(B列)に「○」、どこにも該当数字が無い時には、入力した数字の横、D列に「×」を表示するような数式を考えています。 IF関数を使えばできるような気がするのですが、色々と試してみても中々うまくいきません。 下手な説明で分かり辛いかもしれませんが、どなたかご存知の方がいましたら、ご教授の程頂ければ幸いです。 どうぞ宜しくお願い致します。

  • エクセルの質問です

    A列は空白 B列に商品をあらわ5桁のコードが入っています。 C列にも同じく商品を表す5桁のコードが入っているのですが、 B列のセルと隣り合ったセルには同じ数字が入っていません。 D列には取引先の会社名が入っています。     B1に入ってる5桁の数字と同じ数字が入っている C列のセルを探し、 そのセルの隣のD列の会社名をA1のセルに表示させたいのですが、 どう関数を組んだらいいのでしょうか? A   B    C   D     12345 12354 A社    12334 12345 B社    12443 12544 C社 上の表の場合B1とC2数字が同じなのでA1にB社と表示させたいのです。  B列が昇順で並んでいる C列とD列は重複しない という条件で <=vlookup(b1,c:d,2,false)> という回答を頂いたのですが、 B列が昇順で無い(ランダムに数字が入っています) D列には同じ会社名が何度も出てきます。 どうすればいいのかわかる方お願いします。

  • エクセル 関数

    1行AからGまでに数字があり、 2行AからGまでの数字の下一桁が1行目のAからGまでと同じ場合 3行目に2行目の数字を抽出する関数を教えてください。 例   A  B  C  G 1 15 18  21  33 2 25 19  30  31 3 25        31

  • Excelの関数を教えて下さい

    a1からa100までに1から5までの数字がランダムに入っていて、同様に b1からb100までにも1から5までの数字がランダムに入っているとします。 同じ行に、両方とも2という数字が入っている行が何件あるのかを表すという関数の式 はどのように作ればよろしいのかを教えて下さい。 初歩的なことで申し訳ありませんがよろしくお願いします。

専門家に質問してみよう