我似乎遇到了一个有趣的情况......
我目前正在创建一个 Excel 电子表格,其中有一个包含多个值的表格。该表格中最重要的列是“尺寸”、“供应商”和“报价”,该表格用作供应商价格表的混合。这意味着对于一个特定项目,有多个供应商报价。
电子表格的要求是查找产品的最低报价,显示该价格,然后告诉用户该价格属于哪个供应商。
下表:
假设左上角单元格为 A1
用户将数据输入到表中,并据此将最佳报价计算到单元格区域 E2:F3 中,其中 E 列是最佳价格,F 列是 E 列中的值所属的供应商。
E列的公式为:
{=MIN(IF(Table2[Size]=$D$2,Table2[Offer]))} // This is an array-formula
这将查看表中的“大小”列,根据该答案创建一个数组,并将每个真实结果中的报价添加到数组中。然后,该公式检查该临时数组,然后确定该数组中的最小值。此公式有效。
问题就出在这里……
在 F 列中,需要显示供应商。没有要计算的值。我无法让该值起作用。我能做的是至少获取单元格地址。我无法让单元格的值显示出来。
F列的当前公式是:
{=ADDRESS(MATCH(MIN(IF(Table2[Size]=$D$2,Table2[Offer])), Table2[Offer], 0), 2, 1)} // This is an Array Formula
此公式的结果是正确的列,但不正确的行。在实时电子表格中,我的值从 1 开始偏离了 8 行。这是因为公式查看了临时数组中的行号,这是临时数组范围内的正确答案,但在电子表格范围内不正确,因此需要进行操作以在将来使用时将 8 添加到行号中。
答案的样本可能是这样的$B$2
,但真正的答案是$B$10
。
这是一个问题。下一个问题是获取该地址单元格的值。
为此,我考虑在单独的单元格中使用来测试操作理论:
=CELL("contents", $manual_answer_of_above)
→ 结果 = 正确=INDIRECT(ADDRESS($manual_row_no, $manual_col_no))
→ 结果 = 正确=INDIRECT(ADDRESS(ROW(CELL("contents", $cell_with_address), COLUMN(CELL("contents", $cell_with_address)), 2, 1))
→ 结果 = 公式不被接受
我遗漏了什么?为什么我的公式不允许我显示正确的供应商?
答案1
如果您有 Office 365 Excel,这将返回以下值:
=INDEX(Table2[Vendor],MATCH(MINIFS(Table2[Offer],Table2[Size],$D$2),Table2[Offer],0))
否则,如果你不这样做,那么 AGGREGATE 可以取代 MINIFS:
=INDEX(Table2[Vendor],MATCH(AGGREGATE(15,6,Table2[Offer]/(Table2[Size]=$D$2),1),Table2[Offer],0))
两者都不需要使用数组条目。此外,两者都避免使用易失性函数,如 CELLS、INDIRECT 或 ADDRESS。