将一个Excel工作表中的两列与另一个工作表中的两列进行比较,如果它们匹配,则从另一列复制数据
我一直在考虑使用excelvlookup函数来实现这一点,但我对它非常不熟悉 我需要做以下工作: 在第一页上,A列和B列包含3000行的名字和姓氏 我需要将此与第二张也有名字和姓氏的表格进行比较,第三列包含电子邮件地址 如果第1页和第2页上的两列完全匹配(例如A1+B1=第2页A7+B7),我需要将电子邮件地址从第2页的C列复制到第1页的C列将一个Excel工作表中的两列与另一个工作表中的两列进行比较,如果它们匹配,则从另一列复制数据,excel,vba,Excel,Vba,我一直在考虑使用excelvlookup函数来实现这一点,但我对它非常不熟悉 我需要做以下工作: 在第一页上,A列和B列包含3000行的名字和姓氏 我需要将此与第二张也有名字和姓氏的表格进行比较,第三列包含电子邮件地址 如果第1页和第2页上的两列完全匹配(例如A1+B1=第2页A7+B7),我需要将电子邮件地址从第2页的C列复制到第1页的C列 是否有一个VLOOKUP公式来实现这一点,或者这需要一个VBA脚本?我建议使用一个SQL查询的VBA脚本,可能是这样的(为了得到正确的结果,您需要一些SQ
是否有一个VLOOKUP公式来实现这一点,或者这需要一个VBA脚本?我建议使用一个SQL查询的VBA脚本,可能是这样的(为了得到正确的结果,您需要一些SQL语言技能)。无论如何,这是我推荐给高级用户的方法:
Dim oConn As ADODB.Connection, rs As ADODB.Recordset
sWorkbookName = ThisWorkbook.FullName
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" &
sWorkbookName & """;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX = 1"""
sSheet1="myDataSheet1"
sSheet2="myDataSheet2"
oConn.Open connString
'just an example of SQL, you have to customize it
sSQL = "SELECT [FIRST NAME], [LAST NAME],[EMAIL] FROM [" & sSheet2 & "$] " &
" WHERE
[FIRST NAME] + [LAST NAME} IN (SELECT [FIRST NAME] + [LAST NAME] FROM [" & sSheet1 & "$]" & ") ORDER BY [FIRST NAME] ASC"
rs.Open sSQL, oConn, adOpenStatic, adLockOptimistic, adCmdText
'dump results on a temporary sheet
ThisWorkbook.Worksheets("tmp_sheet").Range("A2").CopyFromRecordset rs
rs.Close
oConn.Close
将此公式另存为目标工作表的C列。尝试以下操作:
将此公式放在表1第C列:
=VLOOKUP(CONCAT(A1,B1),Sheet2!A:D,4,0)
您需要在sheet2上有4列,第一列需要是这样的连接公式:
=CONCAT(B1,C1)
第二列是你的名字,第三列是你的姓,最后一列是相应的电子邮件
这个公式是怎么工作的
=VLOOKUP(**CONCAT(A1,B1)**,Sheet2!A:D,4,0)
它连接sheet1上的名字和姓氏,并在A列的Sheet2上查找,如果有匹配项,它将返回Sheet2 D列中的电子邮件单元格值(D列索引为4)
希望这对您有所帮助您可以进入
表单1!C1
=INDEX(Sheet2!C:C,SUMPRODUCT(--(Sheet2!A:A=A1),--(Sheet2!B:B=B1),ROW(Sheet2!C:C)),0)
然后向下复制
这不需要:
这就是我在当前答案中使用的方法。我会这样做:1)在每个表中添加一个额外的列来组合名称,2)使用VLOOKUP和新列。我认为提问者在SQL数据库中没有任何数据。请注意,您可以在Excel VBA中对Excel表运行SQL查询。只需添加对Microsoft ActiveX Data Objects 6.1库的引用。但是这只适用于高级用户,他们也知道SQL语言,我不知道这一点。谢谢。如果两张纸上的名字完全一样,这看起来很不错。它们也必须在相同的行中进行匹配。一个没有额外列的健壮解决方案也是可能的。
=INDEX(Sheet2!C:C,SUMPRODUCT(--(Sheet2!A:A=A1),--(Sheet2!B:B=B1),ROW(Sheet2!C:C)),0)