検索値より大きいリストの最初の値に対応する変数を検索します

検索値より大きいリストの最初の値に対応する変数を検索します

問題の説明と例については画像を参照してください。

検索値/数値よりも大きい最初の数値に対応する文字を返したいと思います。

私はインデックス マッチを使用してこれを解決しようとしましたが、ルックアップ値と比較対象の数値が完全に一致する場合にのみ機能するようです。

これは機能すると思っていたが機能しない数式です: =+INDEX(A3:F3,MATCH(A6,A2:F2,-1))

ここに画像の説明を入力してください

答え1

コメントで提供したリンクで説明されているように、MATCH(,,-1)データを降順で並べ替える必要があります。そうしないとエラーが返されます。

文字通りに述べたもの(「検索値/数値より大きい最初の数値」)を取得するには、次を使用できます。

=INDEX(A3:F3,MATCH(A6,A2:F2,1)+1)

最初の数字が等しいマッチを取得するにはまたは検索値より大きい場合は、以下を使用できます。

=INDEX(A3:F3,IFERROR(MATCH(A6,A2:F2,0)-1,MATCH(A6,A2:F2,1))+1)

答え2

ここでは、多くのことができるでしょう。もう少し「風変わり」だが、より短い式にしたい場合は、次の式を使用できます。

=INDEX(FILTER(A2:F3,A2:F2>=A6),2,1)

FILTER()このように設定すると、結果の配列の最初の列に目的の文字が返されます (この配列は内部的にのみ使用されます)。そのため、目的の文字が「行 2、列 1」であることが正確にわかるため、関数へのINDEX()入力が簡単になります。

「より大きい」または「等しいかより大きい」は、より慣れ親しんだ方法、つまり の条件で ">" または ">=" を使用して処理されますFILTER()

結果の配列は要求されなくてもソートされるため、ルックアップ行がソートされていない (つまり、順序が正しくない) ケースに対処しますFILTER()。そのため、ルックアップ行の状態に関係なく、正しい答えが返されます。

利用できない場合はFILTER()、次のものを配列として使用して、その値をMATCH()見つけて入力することができます。INDEX()

=MIN(IFERROR((A2:F2)/(A2:F2>=A6),MAX(A2:F2)))

ほぼ完全に旧式で、IF(ISERROR(...使用できない場合は代用できますIFERROR()。値は ">=" テストからの 1 または 0 で割られるため、ルックアップ行に値が生成されるか、エラーが生成されますが、その場合、MAX()ルックアップ行の最高値が入力されるため、目的の値の検索が妨げられることはありません。状況によって必要な場合は、MAX()結果に「+1」を挿入して、より小さいすべての値が「自然な」エントリを超えるようにすることができます。

もちろん、今日ではXLOOKUP()それは非常にうまくいきます:

=XLOOKUP(A6,A2:F2,A3:F3,,1)

短く、シンプル、明確。トリックは必要ありません。

(F Bert嬉しかったです。問題の唯一の要因セットに縛られない答えを必要としている調査中の人のために投稿しただけです。)

関連情報