2014-10-09 86 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 ****注意这一定必须是一个有序列表