我创建了一个包含 AC 列的 LibreOffice Calc 电子表格。在 A 列中,我列出了所购买的零件(按时间顺序升序排列)。在 B 列中,我列出了相应的价格。在 C 列中,我想显示上次购买价格对于当前部分。
这是我想出的办法:
=INDIRECT(CONCATENATE("B",TEXT(MATCH(A8,A1:A7,1),"#")))
它基本上可以工作,但是存在两个问题:
- 这非常复杂。有没有更简单的方法来实现这一点?
- 如果该部件之前从未购买过,它将显示上面一行中部件的价格。
更新:经过更多测试,它确实没有按预期工作。我不知道这是 MATCH 函数中的错误还是它不是适合这项工作的函数。MATCH 函数查找“小于或等于”,我认为“较小”条件导致了问题。
答案1
这个问题与如何让 VLOOKUP 返回最后的匹配?。 A解决方案Excellll 非常符合您的要求。
=INDEX(IF($A$1:$A$1000=A1,$B$1:$B$1000),MAX(IF($A$1:$A$1000=A1,ROW($A$1:$A$1000))))
我把查找范围设得任意大。您可以使用很大的范围,这样在添加更多数据时就无需调整公式。我的测试示例只有六个条目;未使用的行不会匹配任何内容,因此它们会被忽略。
这是在 C1 中的公式,因此查找目标是 A1(两个位置)。
MAX 函数查找最高数字匹配的行(按时间顺序排列,因此是最新的)。
这是一个数组公式,因此需要使用 Ctrl-Shift-Enter 输入。输入 C1 后,您可以使用 Ctrl-C 复制单元格,根据需要选择单元格范围,然后使用 Ctrl-V 粘贴。如果添加更多数据,请复制并粘贴另一块单元格。
或者,将其包装在空白单元格测试中,并预先填充比您需要的更多的单元格:
=IF(ISBLANK(A1),"",formula_above)
采用这种方法,预填充的单元格将保持空白,直到您为该行添加数据。