【发布时间】:2014-10-09 21:25:27
【问题描述】:
我有一个用户每天都使用 Excel 工作表。她花了很多时间将数据从一张纸转移到另一张纸上,并要求我找到一个可以自动化某些流程的脚本/宏/公式。我四处搜索,发现一些脚本看起来很接近我们的需要,但我不是 Excel VBA 脚本方面的专家,所以我不确定如何修改它来完成我们需要的。
我有 2 张大 Excel 表格,一张填满了 S/N 和详细信息,另一张填满了日期、姓名和时间段。我需要脚本完成的是对两张表运行,当它从表 1 的 A 列和表 2 的 A 列中找到匹配的单元格时,它将从表 2 的匹配行中获取所有数据并将其附加到末尾工作表 1 上的匹配行。
这是我想要完成的一个示例:
SN112233 Apple
SN112244 Orange SHEET 1
SN112255 Grape
SN112211 01/01/14 Mike 5Days
SN112222 02/02/14 Tim 2Days SHEET 2
SN112233 05/03/14 Rick 8Days
SN112244 24/03/14 Tim 1Day
SN112255 11/04/14 Daryl 12Days
脚本运行后,数据最终会在表格 1 上看起来像这样
SN112233 Apple 05/03/14 Rick 8 Days
SN112244 Orange 24/03/14 Tim 1 Day SHEET 1
SN112255 Grape 11/04/14 Daryl 12 Days
这是我发现的其中一个脚本,看起来它在我需要完成的工作的正确轨道上,但我不确定如何修改它以完成我需要完成的所有事情:
Sub MatchAndCopy()
Dim sheet01 As Worksheet, sheet02 As Worksheet
Dim c As Range, matchingCell As Long
Dim RangeInSheet1 As Range
Dim RangeInSheet2 As Range
Dim dict As Object, tmp
Set dict = CreateObject("scripting.dictionary")
Application.ScreenUpdating = False
Application.DisplayStatusBar = True
Set sheet01 = Worksheets("Sheet1")
Set sheet02 = Worksheets("Sheet2")
Set RangeInSheet1 = sheet01.Range(sheet01.Range("A2"), _
sheet01.Cells(Rows.count, 1).End(xlUp))
Set RangeInSheet2 = sheet02.Range(sheet02.Range("A2"), _
sheet02.Cells(Rows.count, 1).End(xlUp))
'populate dictionary...
For Each c In RangeInSheet1.Cells
tmp = c.Value
If Not dict.exists(tmp) Then
dict.Add tmp, c.Row
End If
Next c
For Each c In RangeInSheet2.Cells
tmp = c.Value
If dict.exists(tmp) Then
Application.StatusBar = "Please wait while data is being copied," & _
" Processing count : " & c.Row
sheet01.Cells(dict(tmp), "F").Resize(1, 5).Value = _
c.Offset(0, 1).Resize(1, 5).Value
End If
Next c
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
对此的任何帮助将不胜感激!
【问题讨论】:
标签: vb.net excel data-transfer vba