将2列中的数据与VBA或公式进行比较

时间:2017-03-17 15:11:17

标签: excel vba excel-vba

我有两张带有ID的名单,名字和名字,从两个不同的数据库中提取。

我需要向客户发送第三张表格,其中显示表单1的 ID 32721 ,相当于表单2的 ID 32761

制作 DE x FOR 所有这些数据。

我怎样才能在Excel中执行此操作?我已经尝试过公式而我无法使用VBA有什么办法吗?如果是这样,请帮助我,因为我对VBA一无所知。

image

结果

我需要比较两张表中的姓名和姓氏,并在第三张表中显示ID之间的关系。

enter image description here

2 个答案:

答案 0 :(得分:3)

您应该可以使用INDEX MATCH array formula(点击Ctrl + Shift + Enter,而不只是{{ 1)})在工作表1中生成工作表2中的ID列表。link提供了在多个条件上使用Enter INDEX的出色解释。 (它基本上与MATCH相同,但功能更强大)。你的公式看起来像这样:

VLOOKUP

如果上面在Sheet2中的Sheet2中找到B2和C2中的行{=INDEX('Sheet2'!$A$2:$C$13, MATCH(1, (B2='Sheet2'!$B$2:$B$13) * (C2='Sheet2'!$C$2:$C$13) ,0), 1)} ,则分别在Sheet2中的B2:B13和C2:C13中,然后使用MATCH表示该行,而使用Sheet2中的列1。

答案 1 :(得分:1)

此解决方案将Sheet3提取到以下内容:

  1. 匹配记录及其关系
  2. Sheet1中的记录不在Sheet2
  3. Sheet2中的记录不在Sheet1
  4. <强>假设: 工作表中有不同数量的记录,并且记录未在两个工作表中排序。 Sheet1中的记录位于A1:C36Sheet2中的记录位于A1:C33

    <强>公式:

    1. 匹配记录及其关系(位于A1:D33
    2. 要提取两个工作表中显示的记录,请使用以下公式:

      Sheet1 ID(A列中的FormulaArray):

          =IFERROR( INDEX( ID.1,
          AGGREGATE( 15, 6,
          MATCH( Name.2 & LastName.2, Name.1 & LastName.1, 0 ),
          ROW() - ROW($1:$1) )), "")
      

      名称(B栏中的公式):

          =IFERROR( INDEX( Name.1, MATCH( $A2, ID.1, 0 )), "")
      

      姓氏(C栏中的公式):

          =IFERROR( INDEX( LastName.1, MATCH( $A2, ID.1, 0 )), "")
      

      Sheet2 ID(D列中的FormulaArray):

          =IFERROR( INDEX( ID.2, MATCH(
          INDEX( Name.1, MATCH( $A2, ID.1, 0 )) &
          INDEX( LastName.1, MATCH( $A2, ID.1, 0 )),
          Name.2 & LastName.2, 0 )), "")
      
      1. Sheet1中的记录不在Sheet2(位于F1:H33
      2. 要提取仅显示在Sheet1中的记录,请使用以下公式:

        Sheet1 ID(F列中的FormulaArray):

            =IFERROR(AGGREGATE(15,6,
            IF(ISERROR(MATCH( Name.1 & LastName.1, Name.2 & LastName.2, 0 )), ID.1, ""),
            ROW() - ROW($1:$1)),"")
        

        名称(G栏中的公式):

            =IFERROR( INDEX( Name.1, MATCH( $F2, ID.1, 0 )), "")
        

        姓氏(H栏中的公式):

            =IFERROR( INDEX( LastName.1, MATCH( $F2, ID.1, 0 )), "")
        
        1. Sheet2中的记录不在Sheet1(位于J1:L33) 要提取仅显示在Sheet2中的记录,请使用以下公式:
        2. Sheet2 ID(J列中的FormulaArray):

              =IFERROR(AGGREGATE(15,6,
              IF(ISERROR(MATCH( Name.2 & LastName.2, Name.1 & LastName.1, 0 )), ID.1, ""),
              ROW() - ROW($1:$1)),"")
          

          名称(K栏中的公式):

              =IFERROR( INDEX( Name.2, MATCH( $J2, ID.2, 0 )), "")
          

          姓氏(L栏中的公式):

              =IFERROR( INDEX( LastName.2, MATCH( $J2, ID.2, 0 )), "")
          

          其中:

          ID.1 = Sheet1!$A$2:$A$36

          Name.1 = Sheet1!$B$2:$B$36

          LastName.1 = Sheet1!$C$2:$C$36

          ID.2 = Sheet2!$A$2:$A$33

          Name.2 = Sheet2!$B$2:$B$33

          LastName.2 = Sheet2!$C$2:$C$33

          CTRL + SHIFT +输入

          FormulaArrays 同时输入 ,如果输入正确,您将在公式周围看到 { }

          请参阅AGGREGATE functionINDEX functionMATCH function