0

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

我有两份 excel 文件,一份包含公司名称列表及其相应的识别号(总共约 4000 个)。在一个单独的文档中,我有一个人员列表以及他们为谁工作(这些与第一个文档中的公司相同,但有时每个公司会有不止一行,因为我们与该公司的多个人一起工作)。这里大约有 7000 个条目。我想将所有公司 ID 号转移到所有公司人员的文档中。我有代码的概念,但不幸的是,我对 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()将是我会使用的。

4

2 回答 2

2

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

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

= VLOOKUP(PARAM1, PARAM2, Param3)

在哪里:

Param1 - 人事表中包含公司名称的单元格

Param2 - 公司表中的范围(从列到列,如 A:C),从包含公司名称的列到包含其 ID 的列

Param3 - 包含与名称相关的 ID 的列的索引(例如,如果 ID 在 C 列中,而名称在 A 列中,则索引为 3 - 第三列)

你把这个公式拖到所有的人身上。

其他选项使用IndexMatch

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

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

于 2013-07-23T14:38:47.420 回答
1

这应该让你开始。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
于 2013-07-23T14:35:53.310 回答