
サンプルテーブル画像:
目的: サンプル テーブル イメージで、列 C から、最後に入力された CST 番号 1235 と最後に入力された Vat 番号 204 を抽出します。
=VLOOKUP("CST",B2:C5,2,FALSE) を使用すると、最初の CST 値、つまり 1234 が返されます。同様に、VAT の場合、VLOOKUP を使用すると 203 が返されます。
Match を試すと、CST では正常に機能しますが、VAT の場合は、lookup_value が 250 などの小さい値 (VAT 値が 250 未満であるため) を使用した同じ数式では、結果として #N/A が返されます。
スクリーンショット (同じ列で異なる lookup_value を持つ MATCH を使用):
答え1
このような場合には、MATCH よりも AGGRAGATE を好みます。
=INDEX($B:$B,AGGREGATE(14,6,ROW($A$2:INDEX($A:$A,MATCH("ZZZ",$A:$A)))/($A$2:INDEX($A:$A,MATCH("ZZZ",$A:$A))=D$1),1))
実際の基準を D1 と D2 に配置して、それらを直接参照できるようにし、数式にハードコードし"CST"
てドラッグ可能にしました。"VAT"
2 つは$A$2:INDEX($A:$A,MATCH("ZZZ",$A:$A))
配列型の数式なので、参照範囲を動的に設定します。A2 から、テキスト文字列がある列 A の最後のセルまでが設定されます。
Aggregate は、INDEX の条件に一致する最大の行番号 (最後の行) を返します。
答え2
でこれを行うことができますLOOKUP
。
LOOKUP
lookup_value
が配列内のどの数値よりも大きい 場合、関数は配列内の最後の数値を返します。この1/(1/(...))
構造は をエラーに変換する0
ため、最後の「数値」は最後の数値と同じ位置にある値、CST
またはVAT
数式に応じて異なります。
Last CST: =LOOKUP(9E+307,1/(1/(($B$2:$B$999="CST")*$C$2:$C$999)))
Last VAT: =LOOKUP(9E+307,1/(1/(($B$2:$B$999="VAT")*$C$2:$C$999)))
上記の数式では、請求書番号が常に数値であると想定していますが、文字列である場合は、数式を修正する必要があります。
Last CST: =LOOKUP(2,1/(($B$2:$B$999="CST")*ROW($B$2:$B$999)),$C$2:$C$999)
Last VAT: =LOOKUP(2,1/(($B$2:$B$999="VAT")*ROW($B$2:$B$999)),$C$2:$C$999)
答え3
垂直ルックアップには VLOOKUP を使用します。2 番目の引数はマトリックスです。行数に制限がない場合は、行番号を指定せず、列の文字のみを指定します。3 番目の引数は、使用する列を指定します。2 は 2 番目、つまりマトリックスの C を意味します。
デフォルトでは、関数は最初の検索で停止せず、さらに出現箇所を検索し、最終的には、希望どおりに一番下のエントリ (通常は最新のエントリ) を検索します。
したがって使用
=VLOOKUP("CST", B:C, 2)
そして
=VLOOKUP("VAT", B:C, 2)
水平検索用の HLOOKUP もあることに注意してください。
答え4
その日、私はいわばテーブルをひっくり返して、VLOOKUP()
可能な場合は を使用し、そうINDEX/MATCH
でない場合は を使用しました。重要な部分はテーブルをひっくり返すことであり、以下はその方法を示しています。それを、検索したいものを検索するためのテーブルとして使用し、最初の出現が見つかったら、元の (「実際の」) テーブルにある「実際の」最後の出現を見つけます。
したがって、値のテーブルは A1:B22 です。
=INDEX(A1:B22, ROWS(A1:A22)+1-ROW(INDIRECT("1:"&ROWS(A1:A22))), {1,2})
基本的に、行数 (22) を見つけ、1 (23) を加算し、その値 (23) から 1 から行数 (22) までの一連の値を引いた値の配列を作成し、返される行の配列を生成します。23-1=22、23-2=21、23-3=20 など、つまり 22、21、20 と 1 まで続きます。したがって、INDEX()
行は逆の順序で返されます。
XLOOKUP()
現在(2022年)では、 を使って最後から最初に向かって検索するだけです。確かに、上記を実行する場合は、 を使ってSEQUENCE()
数列を生成することになります。