VBA中的VBA多标准搜索

时间:2014-10-09 21:24:14

标签: excel vba excel-vba

我在表格中列出了大约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。

1 个答案:

答案 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 ....疯狂****注意这必须必须是一个有序列表