0

我有 2 个 excel 文件,我需要将数据组合在一起。

我用一些示例数据进行了如下简化。

Excel 文件 1

带有项目代码的第 1 列,比如说 1、2、3

带有项目成本的第 2 列,假设为 1 美元、2 美元、3 美元

Excel 文件 2

带有项目代码的第 1 列,比如说 1、3 和 4

我想复制 Excel 文件 1 的所有第 2 列,粘贴到 Excel 文件 2 中,粘贴匹配到 Excel 文件 2 的第 1 列。如果第 1 列不匹配,它将跳过数据。

这可能吗?

4

1 回答 1

0
  1. 使用 Excel 函数(遗憾的是,它仅在两个工作簿都打开时才有效)。假设“数据源”工作簿位于“C:\Users\User\source.xls”,其数据分别位于名为“Sheet1”的工作表中,分别位于 A 列和 B 列中。我们还假设您的目标工作簿的“关键”数据位于 A 列中。然后您应该使用以下函数填充所需的列,从第 1 行开始:=INDIRECT(CONCATENATE("'C:\Users\User\[source.xls]Sheet1'!",ADDRESS(MATCH($A1,'C:\Users\User\[source.xls]Sheet1'!A:A),2,1,1,1)),1)

  2. 在填充工作表处于活动状态时,使用“目标”工作簿中的以下 VBA 宏:

    Sub Main()
        Dim a As Application, b As workbook, s As Worksheet, i As Integer, iMax As Integer, v As Variant
        Set a = GetInvisibleApplication
        Set b = GetWorkbook(a, "C:\Users\Zerth\1.xls")
        Set s = b.Worksheets(1)
        iMax = GetLastRow(ActiveSheet)
        For i = 1 To iMax Step 1
            v = GetValue(s, Cells(i, 1).Value)
            If Not IsNull(v) Then
                Cells(i, 2).Value = v
            End If
        Next i
        a.Quit
    End Sub
    Function GetInvisibleApplication() As Application
        Set GetInvisibleApplication = New Application
        GetInvisibleApplication.Visible = False
        GetInvisibleApplication.DisplayAlerts = False
    End Function
    Function GetWorkbook(ByRef Application As Application, ByVal Path As String) As workbook
        Application.Workbooks.Open Path
        Set GetWorkbook = Application.Workbooks(Application.Workbooks.Count)
    End Function
    Function GetLastRow(ByRef Sheet As Worksheet)
        GetLastRow = Sheet.Range("A:A").End(xlDown).Row
    End Function
    Function GetValue(ByRef Sheet As Worksheet, ByVal Key As Variant)
        Dim i, iMax As Integer, Result As Variant
        i = 0
        iMax = GetLastRow(Sheet)
        Result = Null
        Do While IsNull(Result) And (i < iMax)
            i = i + 1
            If Sheet.Cells(i, 1).Value = Key Then
                Result = Sheet.Cells(i, 2).Value
            End If
        Loop
        GetValue = Result
    End Function
    
  3. OLEDB与任何已知的编程语言一起使用,查找值就像进行任何其他 SQL 查询一样容易(即,您需要的查询是SELECT F2 FROM [Sheet1$] WHERE F1 = @parameter关闭IMEX)

于 2013-09-27T11:46:59.897 回答