使用VBA Filter功能时将单元格区域作为数组元素无返回结果求助
解决VBA AutoFilter使用单元格区域作为筛选条件无结果的问题
原代码的问题点:
- 错误地将字符串
"rng"存入数组,而非引用单元格区域Range("B2:B350")的实际值 - 单元格区域转数组时误用
Array()函数,导致数组内容不符合筛选要求 - 调用
AutoFilter时写了arr(),正确写法是直接使用变量名arr - 无需激活Sheet3,直接通过工作表对象引用区域更可靠
正确代码示例:
Sub newfilter() Dim arr As Variant Dim rng As Range Dim tempArr() As Variant Dim i As Long ' 直接引用Sheet3的目标区域,无需激活工作表 Set rng = Sheet3.Range("B2:B350") ' 将区域值存入二维数组(单元格区域转数组默认是二维格式) arr = rng.Value ' 把二维数组转换为AutoFilter要求的一维数组 ReDim tempArr(1 To UBound(arr, 1)) For i = 1 To UBound(arr, 1) tempArr(i) = arr(i, 1) Next i ' 执行筛选,Field为要筛选的列号(从1开始计数) Sheet2.Range("A1").AutoFilter _ Field:=3, _ Criteria1:=tempArr, _ Operator:=xlFilterValues End Sub
代码说明:
- 单元格区域通过
rng.Value转成的数组默认是二维结构,而xlFilterValues筛选要求条件是一维数组,所以需要做格式转换 - 直接使用工作表对象(如Sheet3、Sheet2)引用区域,避免因切换激活工作表导致的意外错误
内容的提问来源于stack exchange,提问作者Newton Kapildev
相关产品推荐
相关产品推荐

