Excel / VBA比较两列并将单元格内容从第三列复制到第二列中的第四列

我必须在Excel中为同事写一个macros。 它应该导入.xlsx文件,然后比较两个不同工作表中两列之间的名字和姓氏。 如果在第二张纸上find一个匹配项,则第二张纸中另一列的单元格内容必须被复制并粘贴到第一张纸的一列中。 导入文件的macros已完成并且工作正常。 由于我对macros/ VBA是非常新的东西,所以在纸张和复印之间进行比较时遇到了一些困难。
例:

表1

A栏 (姓和名)

  • John Doe
  • Luigi Ditalia
  • 马里奥Ditalia

N列 (DEPARTEMENTS)

工作表2

B栏 (DEPARTEMENTS)

  • 财政
  • 行政
  • 服务台

C列 (姓和名)

  • John Doe
  • Luigi Ditalia
  • 马里奥Ditalia

正如你所看到的,用户“ John Doe ”存在于表1中的A列中,以及表2中的C列中。现在我需要将B列(对于同一个人)的单元格内容复制到与“John Doe”相同的行。 我怎样才能做到这一点?

这是我迄今为止:

Sub compareCols() Dim masterWorkbook As Workbook Set masterWorkbook = Application.ActiveWorkbook Dim masterSheet_caption As String Dim masterSheet_msg As String Dim masterSheet_Name As String masterSheet_caption = "Choosing a mastersheet" masterSheet_msg = "In which sheet should the departement of the users be written in if a match has been found in the imported sheet? (this will be the mastersheet)" masterSheet_Name = InputBox(masterSheet_msg, masterSheet_caption, User) Dim masterSheet_columnFL_msg As String Dim masterSheet_columnFL_FirstCell As String masterSheet_columnFL_msg = "Which is the first cell (in the mastersheet) in which the first and the last names of the users can be found?" masterSheet_columnFL_FirstCell = InputBox(masterSheet_columnFL_msg, masterSheet_caption, User) Dim importedSheet_caption As String Dim importedSheet_msg As String Dim importedSheet_Name As String importedSheet_caption = "Choosing the imported sheet" importedSheet_msg = "What sheet has been imported to check for duplicates in the columns containing first and last names? (default: import)" importedSheet_Name = InputBox(importedSheet_msg, importedSheet_caption, User) Dim masterSheet As Worksheet Dim importedSheet As Worksheet Set masterSheet = masterWorkbook.Worksheets(masterSheet_Name) Set importedSheet = masterWorkbook.Worksheets(importedSheet_Name) End Sub 

跟进

至lessVBA是英文的。 所以我会去尝试一下。 这应该做的伎俩:

 Sub test() Dim masterWorkbook As Workbook Set masterWorkbook = Application.ActiveWorkbook Dim masterSheet As Worksheet Dim importedSheet As Worksheet Set masterSheet = masterWorkbook.Worksheets("Online") Set importedSheet = masterWorkbook.Worksheets("import") masterSheet.Range("N1:N871").Formula = _ "=INDIRECT(""importedSheet!B"" & INDEX(MATCH(A1,importedSheet!C:C,0),0,0))" masterSheet.Range("N1:N871").Value = masterSheet.Range("N1:N871").Value End Sub 

我所得到的是在表1(masterSheet)的N列中的0。 但至less这是一些东西! 现在我只需要find“错误”。 我想这是传导。 给我5分钟。

非VBA解决scheme

像一个简单的公式

 =INDIRECT("Sheet2!B" & INDEX(MATCH(A1,Sheet2!C:C,0),0,0)) 

可以解决你的问题

在这里输入图像说明

VBA解决scheme

我已经硬编码的单元格地址来显示一个例子。 请根据情况修改。

 Sheet1.Range("N1:N3").Formula = _ "=INDIRECT(""Sheet2!B"" & INDEX(MATCH(A1,Sheet2!C:C,0),0,0))" Sheet1.Range("N1:N3").Value = Sheet1.Range("N1:N3").Value 

至lessVBA是英文的。 所以我会去尝试一下。 这应该做的伎俩:

 Sub test() Dim masterWorkbook As Workbook Set masterWorkbook = Application.ActiveWorkbook Dim masterSheet As Worksheet Dim importedSheet As Worksheet Set masterSheet = masterWorkbook.Worksheets("Online") Set importedSheet = masterWorkbook.Worksheets("import") masterSheet.Range("N1:N871").Formula = _ "=INDIRECT(""importedSheet!B"" & INDEX(MATCH(A1,importedSheet!C:C,0),0,0))" masterSheet.Range("N1:N871").Value = masterSheet.Range("N1:N871").Value End Sub 

我所得到的是在表1(masterSheet)的N列中的0。 但至less这是一些东西! 现在我只需要find“错误”。 我想这是传导。 给我5分钟。