Excel-查找多个项目的最小值

时间:2013-05-24 16:11:47

标签: excel excel-vba vba

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

我需要一个基本上按A列的宏,比较重复的B列价格,并返回C列中该部分的最低价格。

2 个答案:

答案 0 :(得分:1)

或者,您可以:

  1. 创建数据透视表,选择列a和b作为源
  2. 将序列号设置为行字段(将其拖到表格的左侧)
  3. 将价格设置为数据字段(将其拖到中间)
  4. 选择显示最低价格而不是总和(默认值)
  5. 但是,制定公式更有趣!

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

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