提问人:khuetran 提问时间:8/23/2023 最后编辑:braXkhuetran 更新时间:8/24/2023 访问量:40
如果键列中的值匹配,则将列数据从一个工作表复制到另一个工作表
Copy column data from one sheet to another sheet if values in key column matches
问:
我想使用“原始数据”工作表中的数据填充评估表。这个想法是,如果“评估”中 A 列中的值与“原始数据”中 A 列中的值匹配,则“原始数据”的 B、C、D、E、F、G、H 列中的数据将被复制并粘贴到“评估”中的相应列。两张纸中的行数不同。 以下是我的脚本:
Sub Populate()
Dim ws_copy As Worksheet
Dim ws_paste As Worksheet
Dim LastRow As Long
Dim i As Long, j As Long
Call Open_Workbook
Set ws_copy = Workbooks("Raw data.xlsx").Sheets("sheet1")
Set ws_paste = Workbooks("Assessment.xlsx").Sheets("sheet1")
With ws_copy
LastRow = .Cells(.Rows.Count, "H").End(xlUp).Row
End With
With ws_paste
j = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
For i = 2 To LastRow
With ws_copy
If Application.Match(ws_copy.Range("A:A"), ws_paste.Range("A:A"), 0) <> 0 Then
.Cells(i, "B").Copy Destination:=ws_paste.Range("C" & j)
.Cells(i, "C").Copy Destination:=ws_paste.Range("D" & j)
.Cells(i, "D").Copy Destination:=ws_paste.Range("F" & j)
.Cells(i, "E").Copy Destination:=ws_paste.Range("G" & j)
.Cells(i, "F").Copy Destination:=ws_paste.Range("H" & j)
.Cells(i, "G").Copy Destination:=ws_paste.Range("B" & j)
.Cells(i, "H").Copy Destination:=ws_paste.Range("E" & j)
End If
End With
Next i
End Sub
但是,每当执行它时,我都会收到以下错误消息:“类型不匹配”。你能帮我解决这个问题吗? 先谢谢你!
答:
0赞
Black cat
8/23/2023
#1
我做了一些更改以符合 VBA。
必须测试错误值是否匹配结果。
循环访问“原始数据”的“A 列”值。
复制/粘贴后的增量计数器
j
Sub Populate()
Dim ws_copy As Worksheet
Dim ws_paste As Worksheet
Dim LastRow As Long
Dim i As Long, j As Long
Call Open_Workbook
Set ws_copy = Workbooks("Raw data.xlsx").Sheets("sheet1")
Set ws_paste = Workbooks("Assessment.xlsx").Sheets("sheet1")
With ws_copy
LastRow = .Cells(.Rows.Count, "H").End(xlUp).Row
End With
With ws_paste
j = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
For i = 2 To LastRow
With ws_copy
On Error Resume Next
If WorksheetFunction.Match(ws_copy.Range("A" & i), ws_paste.Range("A:A"), 0) <> 0 Then
If Err <> 0 Then
Else
.Cells(i, "B").Copy Destination:=ws_paste.Range("C" & j)
.Cells(i, "C").Copy Destination:=ws_paste.Range("D" & j)
.Cells(i, "D").Copy Destination:=ws_paste.Range("F" & j)
.Cells(i, "E").Copy Destination:=ws_paste.Range("G" & j)
.Cells(i, "F").Copy Destination:=ws_paste.Range("H" & j)
.Cells(i, "G").Copy Destination:=ws_paste.Range("B" & j)
.Cells(i, "H").Copy Destination:=ws_paste.Range("E" & j)
j = j + 1
End If
End If
On Error Goto 0
End With
Next i
End Sub
评论
Variant
Range.Find