2

所以我找到并修改了一个适合我需要的宏,但是有一个限制。我正在构建一个宏来搜索特定诊断代码和程序代码的医疗支付数据。在我目前正在处理的项目中,只有 14 个诊断代码,因此我能够将其直接放入 VBA。但是,有超过 800 个程序代码无法放入 VBA。我能够执行一个单独的 VBA 步骤来引入包含这些数据的表,但我似乎无法将其设置为针对该表进行搜索。但话虽如此,运行此 VBA 搜索如此大量项目的最佳方法是什么?

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

我可能会想出一个答案,而不是问正确的问题。如果有什么我可以澄清的,请告诉我,并提前感谢您的帮助。

-瑞安

4

2 回答 2

2

对于搜索数组,我建议您将数据转储到变体数组中,而不是遍历范围。这样,它减少了在代码和工作表上来回的流量 - 特别是格式化。格式化无论如何都很昂贵,在你的情况下,它似乎要花费你一个月亮..

所以这是它的步骤:(不是代码 -如果您需要代码,请查看这些示例。)。

  1. 将数据转置为变量数组
  2. 在 VBA 代码中随心搜索
  3. 将数据转储到位置(范围)
  4. 格式(范围)
于 2013-02-27T03:57:17.447 回答
1

在您的示例中,您可以使用AutoFilter这样的方式突出显示从 B 列到 O 列的行,其中 G4101-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
于 2013-02-27T04:13:08.347 回答