Excel VBAsearchw /大型数组

所以我find并修改了一个适合我需求的macros,但是有一个限制。 我正在构build一个macros查找医疗支付数据的特定诊断代码和程序代码。 在我目前正在进行的项目中,只有14个诊断代码,所以我可以直接把它放到VBA中。 但是,有超过800个程序代码是我无法装入VBA的。 我能够做一个单独的VBA步骤,把这个数据带进一个表格,但我似乎不能让它设置在桌子上search。 但是,这是说,什么是运行这样的大量项目的VBAsearch的最佳方式是什么?

Sub PROCEDURE_1_search() Dim FirstAddress As String Dim MySearch As Variant Dim myColor As Variant Dim Rng As range Dim I As Long MySearch = Array("412", "4100", "4101", "4102", "4103",...) <-- have over 800 With Sheets("All Claims by Date of Service").range("G5:G55000") For I = LBound(MySearch) To UBound(MySearch) Set Rng = .Find(What:=MySearch(I), _ After:=.Cells(.Cells.Count), _ LookIn:=xlValues, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False) If Not Rng Is Nothing Then FirstAddress = Rng.Address Do With ActiveSheet.range("B" & Rng.Row & ":O" & Rng.Row) .Font.ColorIndex = 1 .Interior.ColorIndex = 4 End With Set Rng = .FindNext(Rng) Loop While Not Rng Is Nothing And Rng.Address <> FirstAddress End If Next I End With End Sub 

我可能会提出一个答案,而不是提出正确的问题。 请让我知道是否有任何我可以澄清,并提前感谢您的任何帮助。

-Ryan

为了search一个数组,我build议你将数据转储到variables数组中,而不是遍历范围。 这样可以减less代码和表单上的stream量 – 特别是格式化。 格式是昂贵的,在你的情况下,它似乎花费你一个月亮..

所以下面是它的步骤:(不是代码 – 如果你需要代码看一下这些示例 )。

  1. 将数据转置为变体数组
  2. 在VBA代码中按照您的需求进行search
  3. 转储数据包的位置(范围)
  4. 格式(范围)

在你的例子中,你可以像这样使用AutoFilter来突出显示列B到O中的行,其中G落在4101-4103之间(即四个条件匹配单个条件)。 一个小的适应将是调用这个代码块不同的标准,如标准412等。

 Sub Smaller() Dim rng1 As Range Set rng1 = Sheets("All Claims by Date of Service").Range("$G$5:$G$55000") With rng1 .AutoFilter Field:=1, Criteria1:=">=4100", Operator:=xlAnd, Criteria2:="<=4103" .Offset(0, -6).Resize(rng1.Rows.Count, 14).Font.ColorIndex = 1 .Offset(0, -6).Resize(rng1.Rows.Count, 14).Interior.ColorIndex = 4 End With Sheets(rng1.Parent.Name).AutoFilterMode = False End Sub