0

A 列代表不同零件的序列号,但这些零件来自不同的供应商,因此价格不同。B 列包含每个部分的价格。

我需要一个宏,它基本上会沿着 A 列向下,比较 B 列的重复价格,并返回 C 列中零件的最低价格。

4

2 回答 2

1

或者,您可以:

  1. 创建一个数据透视表,选择列 a 和 b 作为源
  2. 将序列号设置为行字段(将其拖到表格的左侧)
  3. 将价格设置为数据字段(将其拖到中间)
  4. 选择显示价格的最小值而不是总和(默认)

不过,计算公式更有趣!

于 2013-05-24T19:04:31.897 回答
0

您甚至不需要数组公式就可以做到这一点:

=SUMPRODUCT(($B$1:$B$5)*($B$1:$B$5=MIN($B$1:$B$5+(A1<>$A$1:$A$5)*MAX($B1: $B5)))) /SUMPRODUCT(1*($B$1:B$5=MIN($B$1:$B$5+(A1<>$A$1:$A$5)*MAX($B1:$B5) )))

这里的重要见解是您可以在 SUMPRODUCT 中执行数组操作,也可以在 SUMPRODUCT 中执行函数内部操作。第一个 SUMPRODUCT 给出等于每个组件最低价格的所有价格的总和,第二个给出具有该价格的列表的数量。一个一个除以每个组件的最低价格!

第一个 SUMPRODUCT:

  • ($B$1:$B$5)是您的价格的列向量。
  • 然后我们创建另一个列向量,如果相应的条目$B$1:$B$5等于,则其条目将被强制为 1 MIN($B$1:$B$5+(A1<>$A$1:$A$5)*MAX($B$1:$B$5)),否则为零。
  • MIN 函数中的部分以原始价格向量开始,但如果 a 列每一行的序列号与当前行的序列号不同,我们将 B 列中任意位置的最大价格相加到B 列中的当前行。
  • 这可以防止具有不同序列号的任何部件被计为具有最低价格,同时保持当前部件的所有价格不变。
  • 这意味着我们已经构建了一个列向量,其中所有条目都为零或等于输入公式的单元格行中组件的最低价格。

第二个 SUMPRODUCT 与第一个相似,只是这次我们只是将满足条件的次数相加,而不乘以价格。

于 2013-05-24T18:08:19.640 回答