找到匹配范围&替换相邻单元格值 - Excel VBA

时间:2014-10-27 22:11:25

标签: excel vba excel-vba replace

我有两个需要比较的数据集 - 一个包含我的主数据集,另一个包含该数据集中一个变量的更正值。

例如,

数据集:

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

2 个答案:

答案 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对公式进行硬编码,然后删除连接列。