我有两个需要比较的数据集 - 一个包含我的主数据集,另一个包含该数据集中一个变量的更正值。
例如,
数据集:
FirstName1 | LastName1 | UserID1 | etc1 | etc1 FirstName2 | LastName2 | UserID2 | etc2 | etc2 FirstName3 | LastName3 | UserID3 | etc3 | etc3
等等。
但是,“用户ID”列不正确,需要使用单独的工作表中的值进行更新:
FirstName1 | LastName1 | **Corrected**UserID1 FirstName2 | LastName2 | **Corrected**UserID2 FirstName3 | LastName3 | **Corrected**UserID3
等等。
我的目标是使用前两个单元格作为条件找到匹配项,然后如果找到匹配项,则相应地替换第一个工作表中的用户ID。不幸的是,原始数据集很多比校正来自的片材(~30k行)更小(约3k行),因此尚未确定更简单的解决方案。
我的VBA技能很差(典型的,我知道),这就是我来的:
Sub FindReplace()
Dim lr As Long, i As Long
With Sheets("Data Set")
lr = .Range("A:B").End(xlUp).Row
For i = lr To 1
If IsNumeric(Application.Match(.Range("A1:B1").Value, Sheets("Values").Range("A1:B1").Value, 0)) Then
.Cells("C1").Value = Sheets("Values").Cells("C1")
End If
Next i
End With
End Sub
然而,这没有做任何事情,我有点难过(并且在我头上)。理想情况下,我会理解为什么上面的没有工作的其他解释,以便我可以从错误中吸取教训,但任何帮助都会受到无限的赞赏。
非常感谢您的帮助!
+ DS
答案 0 :(得分:2)
如果没有进行构建和测试,我可以看到你有一个错字。
Sub FindReplace()
Dim lr As Long, i As Long
With Sheets("Data Set")
lr = .Range("A:B").End(xlUp).Row
**For i = lr To 1**
If IsNumeric(Application.Match(.Range("A1:B1").Value, Sheets("Values").Range("A1:B1").Value, 0)) Then .Cells("C1").Value = Sheets("Values").Cells("C1")
Next i
End With
End Sub
应该是
For i = 1 To lr
答案 1 :(得分:1)
正如亚历克斯所说,你不需要VBA,一个VLookup可以正常工作。您可以将两个条件连接到两个工作表上的第三列,然后针对该值进行vlookup。
只需确保您的连锁列位于您要检索的ID的左侧。
FirstName1LastName1 |FirstName1 | LastName1 | CorrectedUserID1 FirstName2LastName2 |FirstName2 | LastName2 | CorrectedUserID2 FirstName3LastName3 |FirstName3 | LastName3 | CorrectedUserID3
更新ID后,使用copy / pastespecial:values对公式进行硬编码,然后删除连接列。