search匹配的单元格和复制行数据

我对Visual Basic很陌生,所以我很抱歉如果这是一个基本的问题。

我有两个excel文档,一个是公司名称列表和相应的识别号码(总共约4000个)。 在一份单独的文件中,我有一份人员名单和他们的工作人员(这些人是第一份文件中的同一家公司,但是有时每个公司会有不止一行),因为我们与该公司中的多人合作)。 这里有大约7000个条目。 我想把所有公司的身份证号码都转交给所有公司人员。 我有代码的概念,但不幸的是,我不太了解Excel VBA的语法写这个。 我写了一些代码,但它不工作,我不知道为什么。

Sub Firm_Number_Transfer() Dim i As Integer Dim x As Integer Dim row As Integer Dim oldRow As Integer Dim found As Boolean row = 1 oldRow = 1 For i = Workbooks("PM Firm Contacts - Step 2 - REVIEWED").Worksheets("Sheet2").Cells("B1") To Workbooks("PM Firm Contacts - Step 2 - REVIEWED").Worksheets("Sheet2").Cells("B7122") Step 1 row = row + 1 For x = Workbooks("PM Firms - Step 1 - REVEIWED").Sheets("Sheet1").Cells("B2") To Workbooks("PM Firms - Step 1 - REVEIWED").Sheets("Sheet1").Cells("B4843") Step 1 oldRow = oldRow + 1 If i = x Then Workbooks("PM Firm Contacts - Step 2 - REVIEWED").Sheets("Sheet2").Cells(row, 1) = Workbooks("PM Firm Contacts - Step 2 - REVIEWED").Sheets("Sheet2").Cells(oldRow, 1) found = True End If Next x found = False oldRow = 1 Next i End Sub 

有什么明显的我失踪了? 任何帮助表示赞赏。

编辑

我还要补充一点,表格的设置方式是公司在右边,公司号码在左边。 据我所知, VLOOKUP()只适用于公司在左边,我复制的公司号码在右边。 否则,我将使用VLOOKUP()

您可以使用VLOOKUP公式避免代码:

在人事表中,添加目标列:

 = VLOOKUP(PARAM1, PARAM2, Param3) 

哪里:

参数1 – 人员列表中包含公司名称的单元格

参数2 – 公司表单中的范围(从列到列,如A:C),从包含公司名称的列到包含其ID的列

Param3 – 列的索引包含与名称相关的ID(如果ID在列C中,例如列A中的名称,索引是3 – 3列)

你把这个公式,并把它拖到所有人员。

其他选项使用IndexMatch

 = index(IDColumn; match(CellWithCompanyNameInPersonelSheet; CompanyNameColumn; 0)) 

在必须使用列的地方,为“B”列放置“B:B”。

这应该让你开始。 If语句中的语句是否有拼写错误? 我想你可能是想从一个工作簿/工作表复制到另一个(而不是从同一个)?

 Sub Firm_Number_Transfer() Dim i As Integer Dim x As Integer Dim row As Integer Dim oldRow As Integer Dim found As Boolean Dim xlBook As Workbook, xlBook2 As Workbook Dim xlSheet As Worksheet, xlSheet2 As Worksheet Dim rng As Range, cell As Range, rng2 As Range, cell2 As Range xlBook2 = Workbooks("PM Firms - Step 1 - REVEIWED") xlSheet2 = xlBook2.Worksheets("Sheet1") Set rng2 = xlSheet2.Range("B2:B4843") xlBook = Workbooks("PM Firm Contacts - Step 2 - REVIEWED") xlSheet = xlBook.Worksheets("Sheet2") Set rng = xlSheet.Range("B1:B7122") row = 1 oldRow = 1 For Each cell In rng row = row + 1 For Each cell2 In rng2 oldRow = oldRow + 1 If cell.Value2 = cell2.Value2 Then xlSheet.Cells(row, 1) = xlSheet.Cells(oldRow, 1) found = True End If Next found = False oldRow = 1 Next End Sub