簡體   English   中英

查找匹配范圍並替換相鄰的單元格值— Excel VBA

[英]Find matching range & replace adjacent cell value — Excel VBA

我有兩個需要比較的數據集-一個包含主數據集,另一個包含該數據集中一個變量的校正值。

例如,

資料集:

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。 不幸的是,原始數據集(約3k行)比要進行校正的工作表(約3萬行)要小得多,因此尚未找到更簡單的解決方案。

我的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

在不進行構建和測試的情況下,我可以看到您有錯字。

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

如Alex所述,您不需要VBA,VLookup可以正常工作。 您可以將兩個條件連接到兩張紙的第三列中,然后針對該值進行vlookup。

只要確保您的串聯列在您要檢索的ID的左側即可。

FirstName1LastName1 |FirstName1 | LastName1 | CorrectedUserID1
FirstName2LastName2 |FirstName2 | LastName2 | CorrectedUserID2
FirstName3LastName3 |FirstName3 | LastName3 | CorrectedUserID3

更新ID后,請使用copy / pastespecial:values對公式進行硬編碼,然后刪除串聯的列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM