我有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列不匹配,它将跳过数据。
这可能吗?
答案 0 :(得分:0)
使用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)
。
在“目标”工作簿中使用以下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
将OLEDB与任何已知的编程语言结合使用,查找您的值就像创建任何其他SQL查询一样简单(即SELECT F2 FROM [Sheet1$] WHERE F1 = @parameter
所需的查询{{3}关掉)。