我有一张像
一 | 乙 | 丙 | 1 客户 1 | 产品 1 | $150 | 1 客户 1 | 产品 1 | ---- | 2 客户 1 | 产品 2 | 50 美元| 3 客户 2 | 产品 1 | $150 |
我的想法是,C:C 列从 vlookup 中提取价格,但如果价格相同,我不想添加价格产品已经用于此顾客,我有一个几乎有效的公式,但它会消除同一客户的不同产品。该公式适用于 C 列。
=IF(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,-1)="","",IF(COUNTIF($A$3:A3,B3)>1,"",VLOOKUP(C3,data_validation!A:B,2)))
PS data_validation 只是一个不同的表,我在其中创建所有验证并使用它根据产品编号查找价格。
答案1
以下是采用 Lee 建议使用 SUMPRODUCT() 函数的解决方案。从 C3 开始向下填充此公式:
=IF(SUMPRODUCT((A$3:A3=A3)*(B$3:B3=B3))>1,"",VLOOKUP(B3,E$4:F$5,2))
工作原理:表达式 A$3:A3=A3 和 B$3:B3=B3 返回 True/False 值数组,随着公式向下填充,数组会变得越来越长。例如,在 C6 中,A$3:A6=A6 等于 {False;False;False;True},因为最后一个位置是该范围内唯一一个等于 A6 的单元格。同样,B$3:B6=B6 等于 {False;False;True;True},因为最后两个位置与 B6 匹配。
现在将这两个数组相乘会将 True/False 值转换为 1 和 0,并执行与逻辑 AND() 等效的操作。乘法的结果(在 C6 中)是数组 {0;0;0;1}。SUMPRODUCT() 将此数组的元素相加,返回 1。
现在 IF() 函数返回 VLOOKUP 的结果,因为 SUMPRODUCT() 的结果不 > 1。
查看 C4 中的公式,A$3:A4=A4 为 {True;True} 且 B$3:B4=B4 也为 {True;True},因此乘法得出 {1;1},且 SUMPRODUCT() 返回 2,而 IF() 返回空白。
编辑以显示结果:
我已将查找表与数据放在同一张表上。您可以编辑公式以引用查找表。
注意:如果您觉得这个答案有帮助,请点击左上角的灰色复选标记以接受答案并将其从未回答队列中删除。谢谢。