Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将一个Excel工作表中的两列与另一个工作表中的两列进行比较,如果它们匹配,则从另一列复制数据_Excel_Vba - Fatal编程技术网

将一个Excel工作表中的两列与另一个工作表中的两列进行比较,如果它们匹配,则从另一列复制数据

将一个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

我一直在考虑使用excelvlookup函数来实现这一点,但我对它非常不熟悉

我需要做以下工作:

在第一页上,A列和B列包含3000行的名字和姓氏

我需要将此与第二张也有名字和姓氏的表格进行比较,第三列包含电子邮件地址

如果第1页和第2页上的两列完全匹配(例如A1+B1=第2页A7+B7),我需要将电子邮件地址从第2页的C列复制到第1页的C列


是否有一个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)
然后向下复制

这不需要:

  • 使用VBA
  • 使用数组公式
  • 使用附加(辅助对象)列
  • 这一点的重要性超出了本文的范围

    更多详细信息 您要查找的内容通常称为多重查找。 在SO和其他许多文章中,有很多关于它的问题。 我已经整理了一份此类帖子的列表。

    有许多可能的解决办法。 显示了我发现最健壮的一个。
    这就是我在当前答案中使用的方法。

    我会这样做: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)