【发布时间】:2017-04-04 23:00:32
【问题描述】:
我目前正在使用此代码过滤列 A 中的范围(从单元格 1 开始,到单元格 600)。它只会留下以数字开头的值。
Sub WildAutofilter()
Dim data As Range, c As Collection
Dim v As String, i As Long, ary
Set data = Range("A1:A23")
Set c = New Collection
On Error Resume Next
For i = 2 To 600
v = Cells(i, 1).Value
If Left(v, 1) = "1" Or Left(v, 1) = "2" Or Left(v, 1) = "3" Or Left(v, 1) = "4" Or Left(v, 1) = "5" Or Left(v, 1) = "6" Or Left(v, 1) = "7" Or Left(v, 1) = "8" Or Left(v, 1) = "9" Then
c.Add v, CStr(v)
End If
Next i
On Error GoTo 0
ReDim ary(3 To c.Count - 1)
For i = 4 To c.Count
ary(i - 1) = c.Item(i)
Next i
With ActiveSheet.Range("$A$1:$A$23")
.AutoFilter Field:=1, Criteria1:=(ary), Operator:=xlFilterValues
End With
End Sub
此代码适用于该位置,但我实际要过滤的数据位于 C 列,从单元格 3 开始。我已尝试将代码更改为以下内容:
Sub WildAutofilter()
Dim data As Range, c As Collection
Dim v As String, i As Long, ary
Set data = Range("C3:C26")
Set c = New Collection
On Error Resume Next
For i = 4 To 600
v = Cells(i, 3).Value
If Left(v, 3) = "1" Or Left(v, 3) = "2" Or Left(v, 3) = "3" Or Left(v, 3) = "4" Or Left(v, 3) = "5" Or Left(v, 3) = "6" Or Left(v, 3) = "7" Or Left(v, 3) = "8" Or Left(v, 3) = "9" Then
c.Add v, CStr(v)
End If
Next i
On Error GoTo 0
ReDim ary(0 To c.Count - 1)
For i = 1 To c.Count
ary(i - 1) = c.Item(i)
Next i
With ActiveSheet.Range("$C$3:$C$26")
.AutoFilter Field:=1, Criteria1:=(ary), Operator:=xlFilterValues
End With
End Sub
这总是返回一个下标超出范围的错误并突出显示这一行“ReDim ary(0 To c.Count - 1)”。我在视觉基础方面不是很先进。我的大部分经验是在“Frankensteining”其他人的代码中让它做我想做的事,这正是我对这段代码所做的。我不确定我是否只是没有更改正确的参考,但如果有人可以帮助我解决这个问题,那将不胜感激。
【问题讨论】:
-
您是否尝试过这里给出的任何答案?这里的人已经尽力帮助您解决问题,您可以做的最低限度是提供反馈