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是一个有趣的问题。 您需要执行以下步骤来实现看起来像这样的输出…

在这里输入图像描述

步骤如下:

  1. 数据透视表:使用行字段作为(B)(C)以及作为值字段的AMOUNT(B)的最小值,从列(B)(C)制作枢轴表。 (见下图)
  2. Helper Columns:在数据透视表的一边创build一列,比如(Q) ,它等于列(P)
  3. Contd …:在栏(R) (不幸碰巧在表格的Q栏中,对于那里的混淆抱歉),如图所示,对于单元格Q20 ,例如放入公式

    =IF(P21=P20,Q21&","&M20,M20)

  4. 这将导致创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,"")

在这里输入图像说明