2016-01-20 47 views
0

我正在編譯一份員工CPD類的列表以及它們的工作小時數,爲每個用戶創建打印輸出。我從多個工作表中提取數據,並且在VLOOKUP不斷查找相同數據時遇到問題。我的代碼目前是:用於避免重複的VLookups循環的VBA

result = lookup.Find(name) Is Nothing 

    If (result = False) Then 
     For Each cell In lookup 
      className = Application.VLookup(name, lookup, 7, True) 
      classHours = Application.VLookup(name, lookup, 9, True) 
      Sheets("employee output").Range("B" & counter).Formula = className 
      Sheets("employee output").Range("C" & counter).Formula = classHours 
      empHours = empHours + classHours 
      counter = counter + 1 
      numClasses = numClasses + 1 
      corporate = Range("B" & i) *** vba precompliles the loop so this doesn't work * 
      Set lookup = Range("corporate:K") ** doesn't work either*** 
     Next 
     End If 

所以我需要限制查找範圍的範圍或以某種方式避免找到相同的數據。任何幫助將不勝感激...

+1

在查找中將true更改爲false。它會找到完全匹配的。 –

+0

它仍然一遍又一遍地找到相同的數據。這就是我需要避免的。 –

+1

在'lookup'中找到'name'後,在'lookup'的第一列找到'name'的位置,並通過這個值來抵消'lookup'(你也可以調整' lookup',所以它總是會在同一個單元格中結束)。 –

回答

0

我假設你的查找變量代表包含你的數據範圍。

您的數據重複可能來自您的for each循環。事實上,你正在迭代低谷每個您的範圍的細胞。這意味着一旦找到名稱,循環內部的代碼就會執行多次,其範圍爲,查找範圍爲

試着改變你的循環以下幾點:

Dim row as Range 

for each row In lookup.Row 
    'your code goes here 
Next 

惠特本,代碼將只爲每個行運行一次。