エクセルでn番目に小さな値を重複値からもとめたい

このQ&Aのポイント
  • エクセルのワークシート関数で小さいほうから2番目を求める場合、通常はSMALL関数を使います。
  • 重複する値がある場合、=SMALL(A1:A20,COUNTIF(A1:A20,MIN(A1:A20))+1) のように最小値の数+1番目で求めることができます。
  • n番目の値を求める場合、=SMALL(A1:A20,COUNTIF(A1:A20,"<="&SMALL(A1:A20,COUNTIF(A1:A20,MIN(A1:A20))+1))+1) のように書けます。
回答を見る
  • ベストアンサー

エクセルでn番目に小さな値を重複値からもとめたい

エクセルのワークシート関数で小さいほうから2番目を求める場合、通常はSMALL関数を使うと思います。 対象範囲をA1:A20とした場合、=SMALL(A1:A20,2) です。 ところが対象とする範囲内に重複する値があると正しい答えが返らず、やむをえず =SMALL(A1:A20,COUNTIF(A1:A20,MIN(A1:A20))+1) のように最小値の数+1番目で求めました。 3番目なら =SMALL(A1:A20,COUNTIF(A1:A20,"<="&SMALL(A1:A20,COUNTIF(A1:A20,MIN(A1:A20))+1))+1) 4番目なら =SMALL(A1:A20,COUNTIF(A1:A20,"<="&SMALL(A1:A20,COUNTIF(A1:A20,"<="&SMALL(A1:A20,COUNTIF(A1:A20,MIN(A1:A20))+1))+1))+1) 5番目なら =SMALL(A1:A20,COUNTIF(A1:A20,"<="&SMALL(A1:A20,COUNTIF(A1:A20,"<="&SMALL(A1:A20,COUNTIF(A1:A20,"<="&SMALL(A1:A20,COUNTIF(A1:A20,MIN(A1:A20))+1))+1))+1))+1) と、どんどん長く複雑になっていきます!! もちろん1~n番目まですべて求めるなら、n-1の値を代入すればこんなに複雑にする必要はありませんが、単にn番目だけを求めたい場合、もっと簡単な方法はないでしょうか?

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.2
emaxemax
質問者

お礼

ありがとうございます。 助かりました!

その他の回答 (2)

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

有名な問題のようなのだが、 趣旨を誤解していたらすみません、無視してください。 もっと質問にデータ例を書いて説明してください。自己流の試行錯誤の、式ばかり書かず、データ例と、ほしい結果を掲示してくれた方がよくわかる。 また作業列(中間結果列)を使っているのが、気に食わない時もスルーして。 例データ A1:A16 23 34 1 3 5 45 63 2 3 5 6 78 56 4 4 -- E2セルに =RANK(A2,$A$2:$A$16,1)+COUNTIF($A$2:A2,A2)-1 下方向に式を複写。 E2:E16 10 11 1 3 7 12 14 2 4 8 9 15 13 5 6 G2セルに何番目の数字を入れる H2セルに =INDEX($A$2:$A$16,MATCH(G2,$E$2:$E$16,0),0) 例えばG2に 7を入れると、H2は 5 とでる。

emaxemax
質問者

お礼

ありがとうございます。 質問の書き方が悪かったようです。 単にn番目だけを求めたい場合、もっと簡単な方法とは作業列などを使わない趣旨でした。すみません。 仮に3番目であれば以下の数式で求められることがわかりました。 =SMALL(IF(FREQUENCY(A1:A20,A1:A20),A1:A20),3)

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.1

添付図参照 B1: =IF(COUNTIF(A$1:A1,A1)=1,A1) C1: =SMALL(B$1:B$20,ROW(A1)) セル C2 が「小さいほうから2番目」です。

emaxemax
質問者

お礼

ありがとうございます。 質問の書き方が悪かったようです。 単にn番目だけを求めたい場合、もっと簡単な方法とは作業列などを使わない趣旨でした。すみません。 仮に3番目であれば以下の数式で求められることがわかりました。 =SMALL(IF(FREQUENCY(A1:A20,A1:A20),A1:A20),3)

関連するQ&A

  • Excelで重複データの件数ではなく、何番目かを求める方法

    下記のような表があり、A列に入っている値が重複している場合、 B列に件数を求めるにはCOUNTIF関数を使いますが、件数ではなく、 何番目かを求めることはできるのでしょうか。  A列   B列  りんご 1  りんご 2  みかん 1  りんご 3  バナナ 1  みかん 2 すみませんが、ご教授いただけたら幸いです。 宜しくお願い致します。

  • n番目に大きな値を探索する

    Java初心者です。 Javaで「n番目に大きい値を探索」するプログラムを組みたいのですが、お力を貸してください! 配列データ(10)には各要素に1~10の値が入っています。 ただし配列データをランダムで数値を入れた場合でも動くこと。 ランダムで決めたn番目の値を探索するプログラムです。 ---- int[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //配列データの順番はランダムに並び替わります int n = random.nextInt(data.length) + 1; for(int range = 0; range < n; range ++) { //n番目の要素が見つからなかった場合 if(n > data.length) { System.out.print(n + "番目に大きい要素は見つかりませんでした。"); break; } /* 範囲の先頭から最後まで処理を繰り返し、範囲内の最小値が格納 * されている要素を決定する */ for(int seach = range + 1; seach < data.length; seach ++) { //基準値より探索値が小さかった場合 if(data[range] <= data[seach]) { int swa = data[range]; data[range] = data[seach]; data[seach] = swa; } } //n番目の要素が見つかった場合 if(n -1 == range) { System.out.print(n + "番目に大きい要素は" + data[range] + "です。"); break; } } ---- と言う感じで一度組んでみたのですが、 配列に格納されている値を変更しないようにと言われました。 まず一番大きな値を探し、その値より小さい値を順に探索していけばいいのだと思うのですが、いまいち分かりません。 誰か教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • エクセルで特定の文字列を含む値を重複を除いて数える

    いつもお世話になります。 今回の質問ですが、例えば、セルA1からA1000に、いろんな人の名前がフルネームで入っているとします。 同じ人物が複数回登場することはありますが、同姓同名の人はいないものと考えてください。 そして、このリストの中に、「山田」さんは何名いるのかを、同人物の重複を除いて数えたいわけです。 重複して数えていいならば、「=COUNTIF(A1:A1000,"山田"&"*")」で、 山田さんに限らずに、重複を除いた人数を調べたいならば、「=SUMPRODUCT(1/COUNTIF(A1:A1000,A1:A1000))」でそれぞれ調べられますが、山田さんの重複を除いた人数となると、どうすればよいでしょうか。 私に考えつく方法では、B1に「=COUNTIF(A1,"山田"&"*")」と入力し、以下B列にこれをコピーをしておけば、「=SUMPRODUCT((B1:B1000)/COUNTIF(A1:A1000,A1:A1000))」で求めたい値を得られますが、できれば作業列は使用しないでこの値を求めたいです。

  • excelの関数(offsetやaddressについて)

    excelの質問です。 現在C4からC8に、SMALL関数を使って、指定範囲中の1番目から5番目までの小ささの値を抽出しています。 そして、B4からB8に、C4からC8の抽出元のセルの6列左にあるセルの値「名前」を抽出しようとしているのですが、うまくできません。 offset関数の"基準"はセルの番地でないといけないようなので、 、値を返すSMALL関数は直接代入できません。 ネットで調べたら、抽出された最大値の番地を返す式 ADDRESS(SUMPRODUCT((MAX(K2:K75)=K2:K75)*ROW(K2:K75)),SUMPRODUCT((MIN(K2:K75)=K2:K75)*COLUMN(K2:K75)),4) を見つけたのですが、これを直接offset関数の"基準"に代入してもなぜかエラーが出てしまいます。 どうしたらうまくできるでしょうか。 全く上記に書いたやり方と違っても構いません。 よろしくお願いします。

  • 重複チェックである値はチェックしない方法

    エクセルの重複データを以下関数でチェックしています。 =IF(COUNTIF(A:A,A2)>1,”重複”,””) 例えばA列に○が複数入力されていた場合、○も重複としてみなされます。 これをカウントしないためには、どうすればいいかわかりますか? 複数条件で○を省くことができれば可能ですか?

  • excel2007 重複する値の抽出について

    いつもお世話になっております。 またお知恵を拝借しようと思い、質問しております。 重複するデータから 3つ重複する値のみを抽出したいときの抽出方法を教えてください。 例) A B 1 重複 1 重複 2 重複 2 重複 2 重複 3  4 重複 4 重複 4 重複 5 IF(COUNTIF($A$1:$A$10,A1)>1,"重複","") で重複するものは確認できました。 ここから3つ重複している値のみを抽出したいときの抽出方法がわからなくて困っています。 簡単な方法はありますか? 2つ重複している値と1つだけの値を削除すればいいのですが、大量にデータがあります。 重複のみを抽出した後、2つ重複した値だけを削除できる方法か、3つ重複した値のみ抽出する方法はありますか? 重複するのは3つまでで、なんせ3つ重複している値のみにしたいというわけです。 excel2007使用。「重複を削除」をすると全ての重複が削除されてしまうので、困っています。 どうかお力をお貸しください。

  • Excel IDが重複するデータから値を抽出したい

    Excelで同じ商品IDが登録されたデータの中から一致する値を返したい。 商品IDと商品名を登録しているシート1と商品IDを入力し商品名をINDEX+MATCH関数で商品名を抽出し、商品の詳細の情報(ここでは含有物質と含有量)を登録するシート2がそれぞれあります。 シート2には商品IDと含有成分の物質名を登録する為、商品IDが同じなら1から連番を振る(COUNTIF関数)物質登録用のID2があります。 ここで抽出したい値は シート2を参照範囲として、商品IDを登録しているシート1で 例 IDが1で含有物質Aが登録されていたら、物質Aの含有量の値を抽出したい しかしINDEX関数、VLOOKUP関数で抽出しようとしても、シート2には同じ商品IDが複数登録されているので、一番最初に合致した値しか返すことができません。 重複した商品IDが登録されているデータから商品IDが1でかつ、含有物質Aが登録されていたら、その含有量の値を抽出したい場合、どのような関数を使えばいいでしょうか。 VLOOKUPは参照範囲の列を挿入してしまうと抽出範囲がずれてしまう為、INDEX+MATCH関数を使用しております。 すこしややこしいですが、ご教授頂けると助かります。 宜しくお願い致します。

  • Excel 個数の集計時の重複削除について教えてください。

    COUNTIFを使用し個数を集計したのですが、 同じ値がでてきた時に重複してしまいました。 よい関数を教えてください。 A列  B列(カウント) 111  2 222  1 111 =COUNTIFだとこれも2となってしまうので、行を非表示(または削除)したデータを他シートに表示したい。 333  1 よろしくお願いします。

  • エクセルでデータの「どこで重複か」を見つける

    エクセルでデータが「どこで重複しているか」を見つける方法として 以前質問した際に教えていただいたのが B1セルに次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",IF(COUNTIF(A$1:A1,A1)<=1,"","重複No."&COUNT(A$1:A1,A1))) これで重複があれば上の行から数えてその行のA列に有るデータが何番目の重複であるかがB列に表示されます。 ということでしたがこれには漏れがありました。 =IF(A1="","",IF(COUNTIF(A:A,A1)<=1,"","重複No."&COUNT(A:A,A1))) とすると漏れはありませんが、No.はすべて「0」となるのです。 何番目の重複かが分かる方法はありませんか。

  • 重複エラーを出したい

    Excelで重複エラーを出したくて、 A列はリスト、B列は任意に値を入力出来るようにし、 C列で「=A3&B3」として、結合しています。 そこで、C列で同じ値となった場合、重複エラーを出したいのですが、 COUNTIFを使用して「=COUNTIF(C:C,C3)=1」としても、重複エラーが出力されません。 「=A3&B3」の値をC列の数式内に引き継いでエラー出力させるには、 どのようにすればいいのでしょうか。 よろしくおねがいいたします。

専門家に質問してみよう