Excel VLOOKUP或索引匹配
假设我有3列数据Excel VLOOKUP或索引匹配,excel,excel-formula,Excel,Excel Formula,假设我有3列数据 AMOUNT(A) AMOUNT(B) INVOICE(C) 55 49 4541 47 47 1515 42 47 4478 86 12 9993 12 100 1224 5 44 1452 100
AMOUNT(A) AMOUNT(B) INVOICE(C)
55 49 4541
47 47 1515
42 47 4478
86 12 9993
12 100 1224
5 44 1452
100 4287
99 4444
我需要检查的是A列中的值是否与B列中的值匹配。如果匹配,它将返回D列中C列的值。现在使用VLOOKUP很容易,但是我要处理700多行,并且有多个匹配的金额。索引(匹配)可以工作,但它只返回一个值。这是VB唯一的问题吗
也就是说,值47在B列中存在两次,因此D列将返回两个发票号(1515-4478)在VBA中,问题将是微不足道的,因为您已经用问题陈述本身正确地描述了逻辑 仅使用Excel功能而不使用VBA是一个有趣的问题。您需要执行以下步骤以实现如下输出 步骤如下:
(B)
和(C)
创建透视表,行字段为(B)
和(C)
,最小值为金额(B)
。(见下图)(Q)
,它与列(P)
中的所有内容都相等(R)
(不幸的是,该列恰好位于工作表的Q列中,很抱歉出现混淆),如图所示,对于单元格Q20
,例如,输入公式
=IF(P21=P20,Q21&“,”&M20,M20)
(P) (Q)
12 9993
44 1452
47 4478,1515
47 4478
49 4541
99 4444
100 4287,1224
100 4287
现在艰苦的工作完成了。您所需要做的就是使用VLOOKUP
键-值对从此帮助表(P)(Q)
-这将非常快,因为透视表始终保持排序,因此不需要精确的查找。
-下面显示了Pivot表以及最终的VLOOKUP
公式的屏幕截图
透视表和辅助表:
最终公式:
所以我使用Countif来查看是否有基于列A的DUP。
在D列类型中,=IF(COUNTIF($A$2:$A$9,B2)>0,C2,“”)
根据我的经验,是的,这需要VBA代码。Index和Vlookup都只返回它们遇到的第一个结果。您喜欢公式还是VBA??如果你的第一选择是只使用公式,我真的不认为它会起作用。您可以接近Excel数组公式,但我不知道有任何非VBA方法可以解决无法连接范围/数组以及缺少分隔符的问题。数组方法将使用一个小的UDF进行连接。或者你可以为整件事编写一个UDF。是的,数组公式可以,但不能像@MarkBalhoff所指出的那样单独返回D列上的单个单元格。@Treevar,看看下面的非基于VBA的解决方案。我不反对使用VBA,但我想要一个没有VBA经验的人可以编辑的解决方案。HNK您的解决方案很棒!我一定错过了什么。根据我对OP问题的理解,他想要一个列,逻辑上在a列旁边,是该金额的所有发票的列表。您似乎假设A)A列与B/C列是同一表格的一部分,B)OP希望看到当前平面表格格式中具有匹配金额的所有发票。这两种假设都不符合我对这个问题的理解。如果A列中只包含一次发票号,您的问题将如何“返回两个发票号?”@MarkBalhoff,上述方法应在没有任何基于VBA的宏/公式的情况下工作。看一看,好多了。一个可靠的非VBA答案。R中的公式和文本的行为类似于P列中的数据,但图像显示为空。在那里稍微调整一下后,它在我这边起作用了。就我个人而言,我避免使用透视表作为中间处理工具,但如果首选公式,则任何其他选项都会更加混乱。如果OP的数据没有停滞,则OP可能必须确保数据透视表刷新和/或扩展数据源范围。哦,还有一个奇怪的机会,OP关心第一个表上的任何发票排序顺序,这可能会有问题。是的,我会发现VBA是一个更好的选择。同样是的,截图是在我转移一些专栏之前拍摄的,但我希望它很清楚。最后,我同意-pivot表是用来透视数据的,而不是进行花哨的排序,但在这种情况下,如果出于安全原因(仅允许.xlsx等),如果某人只需要使用非VBA解决方案,这是整洁的、易于维护的,等等。Regd.排序顺序,可以通过pivot表按排序列(C)进行处理不同的是,可以实现一些排序层次结构。在这种情况下,数据不是动态的。VBA将是一个更好的选择,我同意,但我想尝试将其作为非VBA解决方案,以便新手用户可以在将来需要时使用类似的系统。谢谢hnk!