Arrays 带大数组的Excel VBA搜索

Arrays 带大数组的Excel VBA搜索,arrays,performance,excel,vba,search,Arrays,Performance,Excel,Vba,Search,因此,我找到并修改了一个适合我需要的宏,但是有一个限制。我正在构建一个宏来搜索医疗付款数据,以查找特定的诊断代码和程序代码。在我目前正在进行的项目中,只有14个诊断代码,因此我能够将其直接输入VBA。然而,有超过800个程序代码,我无法放入VBA。 我可以做一个单独的VBA步骤来引入一个包含此数据的表,但我似乎无法将其设置为针对该表进行搜索。但话说回来,对如此大量的项目运行VBA搜索的最佳方式是什么 Sub PROCEDURE_1_search() Dim FirstAddress As Str

因此,我找到并修改了一个适合我需要的宏,但是有一个限制。我正在构建一个宏来搜索医疗付款数据,以查找特定的诊断代码和程序代码。在我目前正在进行的项目中,只有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
子过程\u 1\u搜索()
将第一个地址设置为字符串
Dim MySearch作为变体
作为变体的暗淡霉色
变暗Rng As范围
我想我会坚持多久

MySearch=Array(“412”、“4100”、“4101”、“4102”、“4103”和…)要搜索数组,我建议您将数据转储到变量数组中,而不是遍历范围。这样,它减少了代码和工作表上来回的通信量,特别是格式化。无论如何,格式化是昂贵的,在你的情况下,它似乎花费你一个月亮

下面是它的步骤:(不是代码-)

  • 将数据转换为变量数组
  • 根据需要在VBA代码中搜索
  • 在位置(范围)中转储数据包
  • 格式(范围)

  • 在您的示例中,您可以像这样使用
    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
    
    Sub-minger()
    变暗rng1 As范围
    Set rng1=表格(“按服务日期列出的所有索赔”)。范围($G$5:$G$55000)
    使用rng1
    
    .AutoFilter字段:=1,准则1:=“>=4100”,运算符:=xlAnd,准则2:=“那么现在您遇到了什么问题?您的代码是否工作正常,但速度比您希望的慢,或者您遇到了什么具体错误?您的问题不在于数组的大小,800行是可以的,而在于大量的行(55000行)您正在对800次执行一次搜索。实际上,更可能的是问题所在的结果总数,而不是区域。您正在为每个匹配设置800个代码的每个匹配的格式-因此,对于每个代码10个查找,您正在单独设置8000行的格式。有些行可能会重叠。我会使用a)
    Union
    并在末尾使用单一格式b)在您的计算机上使用自动筛选range@Ryski这是什么意思?然而,有超过800个程序代码我无法放入VBA中。@bonCodigo我对VBA比较陌生,我在给定的表格中有800个程序代码要搜索。最初我试图弄清楚如何将换行符放入VBA,并将所有800个过程代码硬编码到宏本身。