将2列中的数据与VBA或公式进行比较
我有两张ID,第一个和最后一个名字,从两个不同的数据库中提取。
我需要向客户端发送第三张纸,其中显示了纸张1的ID 32721等同于纸张2的ID 32761 。
为所有这些数据做一个DE x 。
我怎样才能在Excel中做到这一点? 我已经尝试过公式,我一直没有能力,有没有办法用VBA做到这一点? 如果是这样,请帮助我,因为我对VBA一无所知。
结果
我需要在两张纸上比较姓名和姓氏,在第三张纸上显示身份证之间的关系。
这个解决scheme提取到Sheet3
如下:
- 匹配logging和他们的关系
-
Sheet1
中的logging不在Sheet2
-
Sheet2
中的logging不在Sheet1
假设:在工作表中有不同数量的logging,并且这两个工作表中的logging没有sorting。 Sheet1
中的logging位于A1:C36
,而Sheet2
中的logging位于A1:C33
公式:
- 匹配logging及其关系(位于
A1:D33
)
要提取出现在两张表中的logging,请使用以下公式:
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 )), "")
-
Sheet1
中的logging不在Sheet2
(位于F1:H33
)
要提取只出现在Sheet1
的logging,请使用以下公式:
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 )), "")
-
Sheet2
中的logging不在Sheet1
(位于J1:L33
)要提取仅出现在Sheet2
的logging,请使用以下公式:
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
inputFormulaArrays
同时按下CTRL + SHIFT + ENTER , 如果input正确 ,您将 在公式周围 看到 {
和 }
请参阅AGGREGATE函数 , INDEX函数 , MATCH函数 。
您应该可以使用INDEX
MATCH
数组公式 (请Ctrl
+ Shift
+ Enter
,而不是Enter
)来生成Sheet 2中的ID列表。该链接提供了在多个条件下使用INDEX
MATCH
的极好的解释。 (它基本上和VLOOKUP
,但function更强大)。 你的公式看起来像这样:
{=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范围内的Sheet1中find来自Sheet1的B2和C2的行MATCH
,然后使用INDEX
作为该行和来自Sheet2的第1列。