【发布时间】:2021-09-08 04:03:25
【问题描述】:
我有两个不同的工作簿,wb1 和 wb2。我需要一个 VBA 脚本,它将匹配每个工作簿中两列的行数据,然后将偏移单元格从 wb2 复制到 wb1,循环遍历每一行的整个工作簿。我发现this post 非常接近,但是它不会将两列中的数据视为要匹配的单个数据。如果不先将列合并到单个单元格中,这可能吗?任何帮助将不胜感激。
这是我从引用的帖子中修改的代码,许多项目都被注释掉了,因为我一直在努力使它工作和故障排除。
Dim w1 As Worksheet, w2 As Worksheet
Dim c As Range
Dim FR As Variant '<-- use Variant to allow catching a Error value
Dim ws1Range As Range, ws2Range As Range
Set w1 = Workbooks("Job Number with Labor Code.xlsx").Worksheets("LaborData")
Set w2 = Workbooks("Labor Report Project Hours.xlsx").Worksheets("Sheet1")
Set ws1Range1a = w1a.Range("C4", w1.Range("C" & w1.Rows.Count).End(xlUp))
Set ws1Range1b = w1b.Range("D4", w1.Range("D" & w1.Rows.Count).End(xlUp))
Set ws2Range = w2.Range("A8", w2.Range("B" & w1.Rows.Count).End(xlUp))
'w1.Activate
'ws1Range.Select
'w2.Activate
'ws2Range.Select
For Each c In ws1Range
MsgBox (c.Value)
FR = Application.Match(c.Value, ws2Range, 0)
If Not IsError(FR) Then
'MsgBox (c.Value)
' ' To copy formula and format
' 'ws1Range.Cells(FR, 2).Resize(, 2).Copy Destination:=c.Cells(1, 2).Resize(, 2)
' ' to copy only values
' 'c.Cells(1, 2).Resize(, 2) = ws1Range.Cells(FR, 2).Resize(, 2)
'c.Cells.Select
' ' To copy values and format
' c.Cells(1, 2).Resize(, 2) = ws1Range.Cells(FR, 2).Resize(, 2)
' ws1Range.Cells(FR, 2).Resize(, 2).Copy
' c.Cells(1, 2).Resize(, 2).PasteSpecial Paste:=xlPasteFormats
End If
Next c
【问题讨论】:
-
您能否修改您的图像以获取更有意义的数据并更清楚地说明您想要实现的目标?我看到了您的图表,但不清楚您在第二列中想要什么?和第一列一样吗?使用不同的值来说明目标(用一堆零值很难分辨)。
-
您好,我添加了一个清晰的图像,要匹配的数据样本被突出显示,要复制的数据显示得更好。谢谢。
-
"如果不先将列合并到一个单元格中,这是否可行?"是的,是的。您可以将字符串(例如
stringOfTwoCells = Cells(a,1).Value & Cells(a,2).Value)与 if 语句或许多其他方式进行比较。即使没有 VBA,您也可以使用公式数组来执行此操作,例如={Match(A2&B2", Sheet2!A:A&Sheet2!B:B,0)}。