プロが教えるわが家の防犯対策術!

検査範囲(A1:A10)のデータが、昇順に並んでいます。
検査値(B1)以下の最大の値および検査値以上の最小の値の両方を検索したいのです。
=MATCH(B1,A1:A31,1)で、検査値(B1)以下の最大の値の位置は取得できますが、=MATCH(B1,A1:A31,-1)で検査値以上の最小の値の位置を取得するには検査範囲のデータは、降順に並べ替えておく必要があります。

データの並び順をいじらず、両方を取得するワークシート関数はないのでしょうか?

A 回答 (3件)

細かい条件がわかりませんが、


=MATCH(B1,A1:A31,1)+IF(COUNTIF(A1:A31,B1),0,1)
とするのではダメでしょうか。
    • good
    • 0
この回答へのお礼

なるほど、検査値と一致するデータがなければ+1するわけですか。
参考になりました。
ありがとうございます。

お礼日時:2005/04/30 20:39

A1からA31までにデータが昇順に並んでいる場合で


ご質問者の意図は検査値以下の最大値と検査値以上の最小値
そのものの抽出ではなく、最大値・最小値が格納されている
セルの位置を求めたいということでよろしいでしょうか?

>=MATCH(B1,A1:A31,-1)で検査値以上の最小の値の位置を取得するには
>検査範囲のデータは、降順に並べ替えておく必要があります。

であれば、例えばD列にダミー列を作って、A1:A31を降順に
並べてしまえばどうでしょう。
ただし、A1からA31まで昇順にデータが並んでいるとの前提です。


D1からD31に=OFFSET($A$1,31-ROW(),0,1,1)を記述する。

検査値以上の最小の値の位置を取得するセル、例えばE32に
「=MATCH(B1,A1:A31,-1)」に替えて=MATCH(B1,D1:D31,-1)を記述する。

ただし、このままではD列における位置を示すことになりますので
A列での位置にこだわるなら
=32-MATCH(B1,D1:D31,-1)にする必要があります。

他のデータをA1からA31に貼り付けて同様に結果を求めるような
ケースでは、まずA列をキーに昇順にソートする必要がありますが
この場合でもD列に記述された数式はソートの影響を受けません。

余談ですが、
最大値・最小値が格納されているセルの位置を求めたいではなく、
検査値以下の最大値と検査値以上の最小値そのものの抽出という
ことであれば
VLOOKUP関数を使用する手段もあると思います。

この回答への補足

お礼で追加質問してしまいましたが、質問をあらたに投稿したほうがよさげですね。

そうします。ありがとうございました。

補足日時:2005/05/01 12:00
    • good
    • 0
この回答へのお礼

ありがとうございます。
極力作業列は作りたくなかったのです。

> 検査値以下の最大値と検査値以上の最小値そのものの抽出ということであればVLOOKUP関数を使用する手段もあると思います。

いえ、別に値自体も必要なんです。
それでVLOOKUPも考えたのですが、
=VLOOKUP(B1,A1:A31,TRUE)
では、やはり検査値以下の最大の値しか所得できなかったのですが、検査値以上の最小の値をもとめるにはどうすればいいのでしょう?

お礼日時:2005/05/01 00:49

私は、およびでないのかもしれませんが、別の答えを考えてみました。



=ROWS(A1:A31)-MATCH(15,LARGE(A1:A31,ROW(A1:A31)),-1)+1
配列確定(Shift+Ctrl - Enter)で出来ますね。
これは、数式の中で、数値を並べ替えて、逆さにして数を取っています。
    • good
    • 0
この回答へのお礼

とんでもない、いつも頼りにしてますよ~(笑)
配列数式は使ったことがありませんでした。
勉強になります。
いつもありがとうございます。

お礼日時:2005/05/01 00:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!