2014-10-09 73 views
0

我有一個表中約500K項目的列表。我需要根據年份和服務代碼進行匹配。 我想使它動態,因爲我需要搜索噸和牀單。所以基本上我有這個:VBA中的VBA多標準搜索

'我寧願不這樣做,但我不明白。這會爲每個變量創建一個臨時範圍。我這樣做是因爲當我在具有範圍的單元格中輸入下面的公式時,它可以工作。

Sheets("Worker").Range("A1").Name = "yearlk" 
Sheets("Worker").Range("A2").Name = "svclk" 

For xlRow = 2 To xlLastRow 

    Range("yearlk").Value = Cells(xlRow, xlColYear) 'Sets the range to the current year 
    Range("svclk").Value = Cells(xlRow, xlServiceCode) 'sets the range to current ServiceCode 

    Exists = Evaluate("{=INDEX(vwSVC_RegTool[service_code_id],MATCH(1,(vwSVC_RegTool[term_year]=yearlk)*(vwSVC_RegTool[service_code_id]=svclk),0))}") 

next xlRow 

什麼是討厭我,它在細胞中所有的作品,但我想提出一個自定義的工具,所以它需要從xlam工作。

+0

現在,如果我要談論這一切錯誤確定...我的主要目標是說...年= 2012年和SVC = A52453 ...表中是否存在該組合。 – 2014-10-09 21:25:46

回答

0

我不知道如何回答上面的問題,但是,我只是將範圍設置爲變體,然後設置另一個變量作爲索引,並做了2個循環,這是方式的方式快速。

SVCtran = ThisWorkbook.Sheets("CPT Codes and HCPCS").Range("vwSVC_RegTool") 
ReDim SVCStor(UBound(SVCtran)) 
For I = 1 To UBound(SVCtran) 
    SVCStor(I) = SVCtran(I, 1) 
Next 

II = Int(Sqr(UBound(SVCStor))) 'this setups the index size 
ReDim SVCIndex(II, 2) 
For I = 1 To UBound(SVCIndex) - 1 
    SVCIndex(I, 1) = II * I 'set position of index 
    SVCIndex(I, 2) = SVCStor(II * I) 'set value of index Start 
Next I 
SVCIndex(UBound(SVCIndex), 1) = UBound(SVCStor) 

然後在actionFor xlRow = 1的索引xlLastRow - 1 對於xlRow到xlLastRow 已存在=真 比較= ColValue2(xlRow,1)& COLVALUE(xlRow,1)

For R = 1 To UBound(SVCIndex) 'find the start and finish of the index 
     If SVCIndex(R, 2) > compare And compare >= SVCIndex(R - 1, 2) Then 
      Start = SVCIndex(R - 1, 1) 
      Ender = SVCIndex(R, 1) 
     End If 
    Next 

    For R = Start To Ender 'set the loop to only look in the index locations 
     Exists = False 
     If compare = SVCStor(R) Then 
      Exists = True 
      Exit For 
     End If 
    Next 

    If Exists = False Then 
     InvalidFormat(I) = xlRow '2014Z0334 
     I = I + 1 
    End If 

Next 

這個想法是這個原本有大約160MM記錄搜索約100K次的搜索。我知道真正的數學家會殺了我即將說的話,但那是關於平均80億次搜索。有了這個,我們將1.6M設置爲1265尺寸1265的索引,並給出了126MM的平均搜索量.... insanity ****注意這一定必須是一個有序列表