Excel / VBA比较两列并将单元格内容从第三列复制到两个不同工作表中的第四列

时间:2014-08-19 09:12:35

标签: excel vba excel-vba

我必须在Excel中为同事编写一个宏。它应该导入.xlsx文件,然后比较两个不同工作表中两列之间的名字和姓氏。如果在第二张纸中找到匹配项,则必须将第二张纸中另一列的单元格内容复制并粘贴到第一张纸中的列中。导入文件的宏已完成并且工作正常。由于我是Macros / VBA的新手,我在比较工作表和复制方面遇到了一些困难。
示例:

第1页

A栏 (名字和姓氏)

  • John Doe
  • Luigi Ditalia
  • Mario Ditalia

第N栏(部门)

第2页

B栏 (部门)

  • 财务
  • 管理
  • 服务台

C栏 (名字和姓氏)

  • John Doe
  • Luigi Ditalia
  • Mario Ditalia

如您所见,用户" John Doe "存在于表1中的A列和表2中的C列中。现在我需要将B列(对于同一个人)的单元格内容复制到与#34; John Doe&#34相同的行中的N列。 ;。我怎么能这样做?

这是我到目前为止所做的:

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

后续

至少VBA只有英文版。因此,我将尝试这样做。这应该可以解决问题:

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页(mas​​terSheet)的N列中得到的是0。但至少它是什么!现在我只需找到"错误"。而且我猜它是这种诱惑。给我5分钟。

2 个答案:

答案 0 :(得分:2)

非VBA解决方案

这样的简单公式
=INDIRECT("Sheet2!B" & INDEX(MATCH(A1,Sheet2!C:C,0),0,0))

可以解决您的问题

enter image description here

VBA解决方案

我已经硬编码了单元格地址以显示示例。请修改适用的。

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

答案 1 :(得分:0)

至少VBA只有英文版。因此,我将尝试这样做。这应该可以解决问题:

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页(mas​​terSheet)的N列中得到的是0。但至少它是什么!现在我只需找到"错误"。而且我猜它是这种诱惑。给我5分钟。