Excel VBA:如何创建自动过滤器,但过滤器除外?

Excel VBA:如何创建自动过滤器,但过滤器除外?,vba,excel,autofilter,Vba,Excel,Autofilter,我是VBA新手,在一个项目中,我必须在两个特定值(4400000000和5600000000)之间过滤数据。这让我感到棘手的是,一些5500000000的背后有字母,即5500000000 CST。如果后面有字母,我如何编写代码,使其包含这些数字。如果这太模糊了,我如何编写代码,使其包含CST?以下是我目前的代码: Sub macro5() Worksheets("info1").Range("A1").AutoFilter _ Field:=7, _ Criteria1:=">=" &a

我是VBA新手,在一个项目中,我必须在两个特定值(4400000000和5600000000)之间过滤数据。这让我感到棘手的是,一些5500000000的背后有字母,即5500000000 CST。如果后面有字母,我如何编写代码,使其包含这些数字。如果这太模糊了,我如何编写代码,使其包含CST?以下是我目前的代码:

Sub macro5()
Worksheets("info1").Range("A1").AutoFilter _
Field:=7, _
Criteria1:=">=" & 4400000000#, Operator:=xlFilterValues, Criteria2:="<5600000000, Operator:=xlFilterValues"
End Sub 
Sub宏5()
工作表(“info1”).Range(“A1”).AutoFilter_
字段:=7_

Criteria1:=“>=”&4400000000#,运算符:=xlFilterValues,Criteria2:=”循环并创建要筛选的值的字典,然后将键用作带有xlFilterValues的Criteria1

选项显式
亚宏观经济5()
将d变长,将dict变为对象
Dim i为双精度,mn为双精度,mx为双精度
Set dict=CreateObject(“scripting.dictionary”)
mn=4400000000#
mx=5600000000#
带工作表(“信息1”)
如果.AutoFilterMode,则.AutoFilterMode=False
对于d=2到.Cells(.Rows.Count,“G”).End(xlUp).Row
如果为数字(左(.Cells(d,“G”).Value2,1)),则
i=CDbl(分裂(.Cells(d,“G”).值2和Chr(32),Chr(32))(0))
如果i>=mn且i

只有5500000000个?您可以添加第三个包含“5500000000”的条件吗?您可以考虑循环并仅提取数字。如果您需要保留字母,您可以创建一个“帮助者”列,该列将成为您筛选的列。您可以删除“帮助者”“如果不需要,请在末尾列出。循环并创建一个要筛选的值的字典,然后使用关键字作为标准1xlfiltervalues@Jeeped我在尝试运行代码时遇到一个错误。在criteria1中使用数组处理多个值时,使用xlfiltervalues,由于某些原因,数字应该是text-that-looks-a-number。非常聪明的用法当我运行此代码时,我得到了“运行时错误'13':类型不匹配”。当我去调试它时,它显示这行
I=CDbl(Split(.Cells(d,“G”)。Value2&Chr(32),Chr(32))(0))
Option Explicit

Sub macro5()
    Dim d As Long, dict As Object
    Dim i As Double, mn As Double, mx As Double

    Set dict = CreateObject("scripting.dictionary")
    mn = 4400000000#
    mx = 5600000000#

        With Worksheets("info1")
            If .AutoFilterMode Then .AutoFilterMode = False
            For d = 2 To .Cells(.Rows.Count, "G").End(xlUp).Row
                If IsNumeric(Left(.Cells(d, "G").Value2, 1)) Then
                    i = CDbl(Split(.Cells(d, "G").Value2 & Chr(32), Chr(32))(0))
                    If i >= mn And i < mx Then
                        dict.Item(CStr(.Cells(d, "G").Value2)) = .Cells(d, "G").Value2
                    End If
                End If
            Next d
            .Range("A1").AutoFilter Field:=7, Criteria1:=dict.keys, Operator:=xlFilterValues
        End With
End Sub