
列AからCまでのLibreOffice Calcスプレッドシートを作成しました。列Aには、購入した部品のリスト(時系列昇順)があります。列Bには、対応する価格のリストがあります。列Cには、最終購入価格現在の部分について。
私がこれを実行するために思いついたのは次の通りです:
=INDIRECT(CONCATENATE("B",TEXT(MATCH(A8,A1:A7,1),"#")))
基本的には動作しますが、2 つの問題があります。
- 非常に複雑です。これを実現するより簡単な方法はありますか?
- 部品がこれまでに購入されていない場合は、上の行にある部品の価格が表示されます。
更新: さらにテストしたところ、期待どおりに動作しないことがわかりました。MATCH 関数のバグなのか、この関数がジョブに適していないのかはわかりません。MATCH 関数は「小さいか等しい」を検索しますが、「小さい」条件が問題を引き起こしていると思います。
答え1
これは、VLOOKUPで次の値を返す方法最後マッチ?.あ解決Excellll はあなたの要件にほぼ適合します。
=INDEX(IF($A$1:$A$1000=A1,$B$1:$B$1000),MAX(IF($A$1:$A$1000=A1,ROW($A$1:$A$1000))))
ルックアップ範囲を任意に大きくしました。非常に大きな範囲を使用すれば、データを追加しても数式を調整する必要がありません。私のテスト例ではエントリは 6 つだけでした。未使用の行は何も一致しないため無視されます。
これは C1 に入力される数式なので、検索対象は A1 (2 つの場所) になります。
MAX 関数は、最も番号の大きい一致する行 (時系列順、つまり最新の行) を検索します。
これは配列数式なので、Ctrl + Shift + Enter で入力する必要があります。C1 を入力したら、Ctrl + C でセルをコピーし、必要に応じてセルの範囲を選択して、Ctrl + V で貼り付けることができます。さらにデータを追加する場合は、別のセル ブロックをコピーして貼り付けます。
または、これを空白セルのテストでラップし、必要以上のセルを事前に入力します。
=IF(ISBLANK(A1),"",formula_above)
この方法では、行にデータを追加するまで、事前に入力されたセルは空白のままになります。