• ベストアンサー

Excel 特定条件でのMAX値を抽出

こんにちは。 エクセルである特定のMAX値を抽出したいのですがうまく抽出出来ません。具体的には、下のようになっています A列       B列 1       2 7       3 5       6 4       6 3       6 7       6 上のような並びがあるとして、B列の最大値を満たしている数値(この場合は複数の6)に関して、その隣のA列の数値の中で、最大になる数値(この場合は7)を抽出するような関数を作りたいのです。 そのまま読めばいいのかもしれませんが、エクセルを学びたいという気持ちもありますので、どうか分かる方は教えて下さい。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

>そのままMINに変えるだけではうまくいかず、0が抽出されました。 >ちなみにA列の中にはマイナスの値もあるのですがこれは関係ありますか? =MAX(INDEX((MAX($B$1:$B$10)=$B$1:$B$10)*$A$1:$A$10,)) 上記の式の意味は、「(MAX($B$1:$B$10)=$B$1:$B$10)」の部分は、B列のセルがB1:B10セルの中の最大値と等しい場合には「TRUE」異なる場合には「FALSE」が返ります。 これにA列の対応するセルを掛け算するとTRUEの部分は「1」「FALSE」は「0」として計算されるので、最大値の行はA列の値、それ以外の行は0が返ることになります。 この配列の中からMAX関数で最大値を検索していることになります。 ちなみにINDEX関数の部分は、その配列を範囲に変換している(Ctrl+Shift+Enterで確定しなくても演算できるようにしている)数式です。 同様に、最小値を検索する場合は、B列が最小値以外の場合は「0」、最小値の場合はA列の値となる配列が得られます。 このとき注意することは、実際のA列の最小値が正の値である場合は、B列が最小値以外の場合の「0」の値が配列の中で最小となるためご質問のような状況が発生します(マイナスの値が該当データの場合は問題ありません)。 同じことは最大値の場合にも言えることで、例えばA列の最大値がマイナスの値の場合は、最大値が「0」となることになります。 これを避けるには、NO3の回答のように、IF関数でB列の最大値あるいは最小値でない場合は「0」ではなく「FALSE」を返る数式にして(この場合は演算していないのでFALSEは数字として認識されない)Ctrl+Shift+Enterで確定するのが簡単ですが、この操作なしで計算したいなら以下のような数式にする必要があります。 =MAX(INDEX(-(MAX($B$1:$B$10)<>$B$1:$B$10)*10^10+$A$1:$A$10,)) =MIN(INDEX((MIN($B$1:$B$10)<>$B$1:$B$10)*10^10+$A$1:$A$10,)) ちなみに、数式がどのような配列を返しているのか調べたいときは、数式バーの上で計算したい数式部分(例えば「(MAX($B$1:$B$10)=$B$1:$B$10)」の部分)をドラッグして選択してF9キーを押してみてください(解除はEscキー)。

monta1120
質問者

お礼

大変詳しく丁寧な説明をありがとうございます!本当に助かりました。おかげでデータの解析が順調になりました! 数式の確認方法も了解しました。今後の参考にさせていただきます。

その他の回答 (4)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

>エクセルを学びたいという気持ちもありますので、どうか分かる方は教えて下さい ごくふつーに、次のように計算します。 C1に =IF(B1=MIN(B:B),A1,"") と記入、C6までコピー。 =MIN(C:C) と記入し、欲しかった答えを得る。 「学びたい」のとは違うただのゲテモノのアプローチでは、次のようにします。 =MIN((B1:B7<>"")*(B1:B7=MIN(B1:B6))*A1:A7) と記入し、必ずコントロールキーとシフトキーを押しながらEnterで入力する。 #思ったのならどうしてやってみないのですか?

monta1120
質問者

お礼

回答ありがとうございます。 ご指摘はごもっともです。実は回答された方のすべての方法でMAXのみをMINに変えてやってみたんですが結果はすべて0だったので頭を抱えていました。大変申し訳ないのですが、今回keithin様にご提示頂いた方法も数値が0で抽出されてしまいます。。。 ちなみにデータ数は2000近くあり、最小値で抽出されるべき値はマイナスです。 良かったら回答お願いします。手間をかけさせてしまってすみません。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! すでに回答は出ていますので、参考程度で・・・ 表示したいセルに =MAX(IF(B1:B100=MAX(B1:B100),A1:A100)) 配列数式になりますので、Shift+Ctrl+Enterキーで確定します。 この画面からコピー&ペーストする場合はセルに貼り付け後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定です。 数式の前後に{ }マークが入り配列数式になります。 とりあえず100行まで対応できる数式です。m(_ _)m

monta1120
質問者

補足

ありがとうございます。 ちなみに、これの最小値を抽出するバージョン(B列最小値の中からA列最小値を見つける)の関数はどのようにつくればいいですか? そのままMINに変えるだけなんでしょうか?

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

以下のような数式でB列の最大値のセルの中でA列の最大値を求めることができます。 =MAX(INDEX((MAX($B$1:$B$10)=$B$1:$B$10)*$A$1:$A$10,))

monta1120
質問者

補足

ありがとうございます。 今のところこちらを張り付けまして順調です。ちなみに、これの最小値を抽出するバージョン(B列最小値の中からA列最小値を見つける)の関数はどのようにつくればいいですか? そのままMINに変えるだけではうまくいかず、0が抽出されました。 ちなみにA列の中にはマイナスの値もあるのですがこれは関係ありますか?

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>エクセルを学びたいという気持ちもありますので、どうか分かる方は教えて下さい ごくふつーに、次のように計算します。 C1に =IF(B1=MAX(B:B),A1,"") と記入、C6までコピー。 =MAX(C:C) と記入し、欲しかった答えを得る。 「学びたい」のとは違うただのゲテモノのアプローチでは、次のようにします。 =MAX((B1:B6=MAX(B1:B6))*A1:A6) と記入し、必ずコントロールキーとシフトキーを押しながらEnterで入力する。

monta1120
質問者

補足

ありがとうございます!上の質問者の方にも捕捉しましたが、最小値の場合のやり方もぜひ教えていただけると助かります。

関連するQ&A

  • EXCELで関数について

    Aの列に日付、 Bの列に数値を入れた場合に、 数値の最大値、最小値はMAX、MINで抽出できますが、 A列の日付も一緒に抽出するにはどうやったらいいのでしょうか? 教えてください。

  • エクセルでの関数を使った条件抽出方法について

    エクセル初心者です。 エクセルでの関数を使った条件抽出方法についてどなたかご教授願います。 よろしくお願いします。 Sheet1の特定のセルに対して、Sheet2中にある条件に一致するセルの値を 表示させる方法がわかりません。 <具体的内容> 次のような2つのシートがあります。 Sheet1       -------------------------     A     B     C  1                2  2  費目1 3  費目2 4  費目3 ------------------------- Sheet2 -------------------------     A     B     C     D 1  2          1     2     3 3  費目2   100   200   300 4  費目1    30    10    20 5  費目3   150   350   250 ------------------------- Sheet1のC1のセルと同じ数値をSheet2の2:2行から探して、 一致する数値に該当する列の3~4行目の値を、 Sheet1のA2:A3の費目とSheet2のA3:A5の費目とが 一致するようにして、Sheet1のB2:B3に表示したいです。 このときSheet1のB2~B3にはどのような関数式を入れたらよいですか? 上の場合だと、Sheet1のB2=10、B3=200、B4=350となってほしいです。 HLOOKUP、COLUMNなど組み合わせてみたのですが、 全くうまくいきません。簡単ではないのでしょうか? どなたか教えてください、よろしくお願いします。

  • エクセル 特定の文字列を抽出・挿入

    例えば A列にあるセルの中から特定の文字列を検索・抽出して、その特定の文字列だけB列に挿入していく関数はありますか? またはA列にあるセルの中から特定の文字列に挟まれた文字列を検索・抽出してその特定の文字列だけB列に挿入していく関数はありますか? マクロを組まないと難しいのでしょうか?

  • Excelでの複数結果抽出がわかりません

    商品の日毎受注個数の一覧表をExcelで作成しています。 A列には日付 B列にはその日の受注個数 が並んでいます。 そしてB列中の最大値、最小値をE1、E2に関数で表示させています。 B列からE1、E2セル参照で最小値を検索し、隣A列の日付をE1の右隣セルから右方向に並べて複数抽出したいのですが、(該当する日付をすべて表示)どのような関数、マクロを書けば良いでしょうか?

  • エクセルで条件付き書式での複数データを色づけ抽出をしたいのですが、上手

    エクセルで条件付き書式での複数データを色づけ抽出をしたいのですが、上手くいきません。 社員の勤続年数を纏めた表があり、そのリストの数値化した勤続年数の中から「0.5」「1.5」「2.5」「3.5」~「10.5」の数字を色づけ抽出したいのです。(有給計算に使用) 色づけは、文字でも網掛けでも構いません。 A列に氏名、B列に数値化した勤続数が入っているような形です。 *数値は関数で入ってます。 宜しくお願いします。

  • エクセルで文字列の最大値を抽出する方法

    文字列の最大値を抽出したいのですが 4つのセルにA、B、C、Dが入力されている場合の文字列の最大値Dを抽出する関数式を知りたい エクセルヘルプで見るとMAXAとなっていたのですが抽出する答えは”0”となってしまいます。

  • Excelにて複数条件を満たす行の特定のセルの値を返す関数

    Excelにて複数条件を満たす行の特定のセルの値を返す関数を作りたいのですが、上手く行きません。 <Sheet1>   A列  B列  C列 1 2008/6/1 ★  320 2 2008/6/1 ☆  300 : : : Sheet2のA1に、「A列が2008/6/1で、B列が☆の場合、C列の値を返す」という関数を入れたいのですが、どうも上手く行きません。 良い式がありましたら教えて下さいm(_ _)m

  • 条件に合致する文字列を別シートに抽出するには

    こんにちは。 エクセルで特定の条件にマッチするセルの隣のセルの文字列を別シートに抽出したいのですが、 どの関数を使えば良いか分かりません…。 ご存知の方がいらっしゃいましたら、ご回答頂ければ助かります。 ※シート1に以下の様に入力されているとして、B列が「0」の隣のセル(A列)の文字列をシート2に抽出したいと思っています。 【シート1】    A   B 1 [鈴木] [0] 2 [佐藤] [5] 3 [高橋] [0]    ↓ 【シート2】    A 1 [鈴木] 2 [高橋] ※佐藤は「5」なので抽出しない。 よろしくお願い致します。

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

    エクセルのMAX関数についてご質問します。例えば、 A1セルに$B$1:$B20の文字列が入っているとします。 普通にMAX関数を使う時は引数を=MAX($B$1:$B20)と直接入力しますが、=MAX(A1セルの値($B$1:$B20))としてMAX関数の引数をあるセルの値の内容にしたいのですが、その方法を教えてください。困ってます。宜しくお願いします!!

  • エクセル関数 複数の条件でのデータ抽出

    エクセルの初心者です。 関数で複数の条件からデータを抽出する方法をおしえてください。 [Sheet1] date type Qty. 7/1 b-1 100 7/1 a-2 200 7/3 b-1 500 上のようにデータが並んでいます。 その中で条件にかなうQty.を下のシートに抽出したいのです。 行にはtypeが、列にはdateが並んでいます。 [Sheet2] 7/1 7/2 7/3 a-1 0 0 0 a-2 200 0 0 b-1 100 0 500 SUMPRODUCT, DGETなどいろいろ試したのですが、うまくいきません。 (条件が、列と行になっているからでしょうか) これは、同じtypeが異なるdateに出てくる場合があります。 また、dateの順番がばらばらの場合は抽出は不可能ですか。 ご多忙の中申し訳ございませんがよろしくお願いします。

専門家に質問してみよう