我有以下代码,它使用“UG list”作为源代码,并在两个不同的工作表上执行vlookup - Latency和TT。
如果找到结果,它会将字符串“UG”传递到每个工作表的特定列。
问题是即使字符串“UG”更新有重复值也是如此。但我想要的是,“UG”应该更新为唯一值..不应该一次又一次地更新相同的值
Sub vlookup()
Dim cl As Range, Dic As Object
Set Dic = CreateObject("Scripting.Dictionary"): Dic.Comparemode = vbTextCompare
With Sheets("Latency")
For Each cl In .Range("B2:B" & .Cells(Rows.count, "C").End(xlUp).Row)
If Not Dic.exists(cl.Value) Then Dic.Add cl.Value, cl.Row
Next cl
End With
With Sheets("UG list")
For Each cl In .Range("A2:A" & .Cells(Rows.count, "A").End(xlUp).Row)
If Dic.exists(cl.Value) Then
Sheets("Latency").Cells(Dic(cl.Value), 17) = "UG"
End If
Next cl
End With
With Sheets("TT")
For Each cl In .Range("A2:A" & .Cells(Rows.count, "C").End(xlUp).Row)
If Not Dic.exists(cl.Value) Then Dic.Add cl.Value, cl.Row
Next cl
End With
With Sheets("UG list")
For Each cl In .Range("A2:A" & .Cells(Rows.count, "A").End(xlUp).Row)
If Dic.exists(cl.Value) Then
Sheets("TT").Cells(Dic(cl.Value), 23) = "UG"
End If
Next cl
End With
Set Dic = Nothing
End Sub
答案 0 :(得分:0)
两件事:
您对不同的工作表使用相同的字典Dic
。在将其用于下一张表之前,请清除字典,以便您没有任何旧值。
dic.RemoveAll
With Sheets("TT")
.........
要防止第二次更新,只需在第一次找到时立即从字典中删除该项目。虽然我不确定你指的是什么重复值,但在字典中你不能有重复。
If dic.exists(cl.Value) Then
Sheets("Latency").Cells(dic(cl.Value), 17) = "UG"
dic.Remove (cl.Value)
End If
如果您只是在谈论如果列Q已经包含“UG”并且您想要跳过该单元格的情况,那么请事先检查它。
If dic.exists(cl.Value) Then
If Sheets("Latency").Cells(dic(cl.Value), 17) <> "UG" Then
Sheets("Latency").Cells(dic(cl.Value), 17) = "UG"
End If
End If