在Vlookup中更新唯一值

时间:2017-01-15 05:52:53

标签: vba excel-vba duplicates vlookup excel

我有以下代码,它使用“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

1 个答案:

答案 0 :(得分:0)

两件事:

  1. 您对不同的工作表使用相同的字典Dic。在将其用于下一张表之前,请清除字典,以便您没有任何旧值。

    dic.RemoveAll With Sheets("TT") .........

    1. 要防止第二次更新,只需在第一次找到时立即从字典中删除该项目。虽然我不确定你指的是什么重复值,但在字典中你不能有重复。

      If dic.exists(cl.Value) Then
          Sheets("Latency").Cells(dic(cl.Value), 17) = "UG"
          dic.Remove (cl.Value)
      End If
      
    2. 如果您只是在谈论如果列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