我在表格中列出了大约500K项目。我需要根据年份和服务代码进行匹配。 我试图让它变得动态,因为我需要搜索大量的纸张和行。基本上我有这个:
'我宁愿不这样做,但我无法弄明白。这会为每个变量创建一个临时范围。我这样做是因为当我在带有范围的单元格中输入以下公式时,它会起作用。
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 :(得分:0)
我无法弄清楚如何回答上面的问题,但是,我只是将范围设置为变量,然后将另一个变量设置为索引并执行2个循环,这是WAY WAY WAY快速。
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 Exists = True compare = 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
这个想法是这个原本有大约1.6MM的记录来搜索搜索大约100K次。我知道真正的数学家会杀死我要说的话,但那是关于平均80亿次搜索。有了这个我们得到1.6M设置为1264索引大小1265给平均搜索126MM ....疯狂****注意这必须必须是一个有序列表