Excel VLOOKUP或INDEX MATCH
可以说我有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 4287 99 4444
我需要检查列A中的值是否与列B中的值相匹配。如果有匹配,它将返回列D中列C的值。现在,对于VLOOKUP,这很容易,但是我正在处理700多行,有多个匹配。 INDEX(MATCH)可以工作,但它只返回一个值。 这是一个VB唯一的问题?
IE值47在列B中存在两次,因此列D将返回两个发票号码(1515-4478)
在VBA中,这个问题是微不足道的,因为你已经正确地用问题陈述本身描述了逻辑。
只使用Excelfunction,没有VBA是一个有趣的问题。 您需要执行以下步骤来实现看起来像这样的输出…
步骤如下:
- 数据透视表:使用行字段作为
(B)
和(C)
以及作为值字段的AMOUNT(B)
的最小值,从列(B)
和(C)
制作枢轴表。 (见下图) - Helper Columns:在数据透视表的一边创build一列,比如
(Q)
,它等于列(P)
-
Contd …:在栏
(R)
(不幸碰巧在表格的Q栏中,对于那里的混淆抱歉),如图所示,对于单元格Q20
,例如放入公式=IF(P21=P20,Q21&","&M20,M20)
-
这将导致创build类似下面的表格:
表:
(P) (Q) 12 9993 44 1452 47 4478,1515 47 4478 49 4541 99 4444 100 4287,1224 100 4287
现在艰苦的工作已经完成。 所有你需要做的就是从这个帮助表(P)(Q)
使用VLOOKUP
键值对查找 – 这将是非常快的,因为数据透视表总是保持它的sorting,因此一个精确的LOOKUP
是没有必要的。 – 屏幕截图如下所示,以及最终的VLOOKUP
公式
枢轴表和助手表:
最终公式:
所以我使用Countif来查看是否存在基于列A的二重奏。在D列types中, =IF(COUNTIF($A$2:$A$9,B2)>0,C2,"")