我必须在Excel中为同事编写一个宏。它应该导入.xlsx文件,然后比较两个不同工作表中两列之间的名字和姓氏。如果在第二张纸中找到匹配项,则必须将第二张纸中另一列的单元格内容复制并粘贴到第一张纸中的列中。导入文件的宏已完成并且工作正常。由于我是Macros / VBA的新手,我在比较工作表和复制方面遇到了一些困难。
示例:
第1页
A栏 (名字和姓氏)
第N栏(部门)
第2页
B栏 (部门)
C栏 (名字和姓氏)
如您所见,用户" 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页(masterSheet)的N列中得到的是0。但至少它是什么!现在我只需找到"错误"。而且我猜它是这种诱惑。给我5分钟。
答案 0 :(得分:2)
非VBA解决方案
像
这样的简单公式=INDIRECT("Sheet2!B" & INDEX(MATCH(A1,Sheet2!C:C,0),0,0))
可以解决您的问题
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页(masterSheet)的N列中得到的是0。但至少它是什么!现在我只需找到"错误"。而且我猜它是这种诱惑。给我5分钟。