![](/img/trans.png)
[英]Excel VBA - Find values in a range and store adjacent cell in variable
[英]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.