自动过滤列,按字符串末尾的位数

时间:2017-08-08 21:08:01

标签: excel vba excel-vba

大家好,我还没有找到解决这个简单问题的方法。使用VBA,我如何过滤掉以8位数结尾的列中的所有值?

       H
1 Description
2 7825434583090234927383811GEORGEBOYYY12345678
3 8923459283409192043290482CANTELOPEZZZ23456789
4 TH 1264045 Actuals
5 18723892734598298592348592BILLYBOB34567891

我想要的输出是:

       H
1 Description
2 7825434583090234927383811GEORGEBOYYY12345678
3 8923459283409192043290482CANTELOPEZZZ23456789
5 18723892734598298592348592BILLYBOB34567891

因为那些是最后8个值是数字的行。我尝试过使用autofilter结束:

With ActiveSheet.Range("H:H").CurrentRegion
   .AutoFilter Field:=8, Criteria1:= _
    "=*{1-9}8", Operator:=xlAnd
End With

但我不确定正确的表示法。感谢任何帮助

2 个答案:

答案 0 :(得分:2)

您可以使用RightIsNumeric来确定哪些行不以8个数字结尾。只需相应地修改行数:

Sub hidetherows()

Dim sht As Worksheet
Dim lastrow As Long
Set sht = ThisWorkbook.Worksheets("Sheet1") 'Rename the sheet here
lastrow = sht.Cells(sht.Rows.Count, "H").End(xlUp).Row

For i = 1 To lastrow
    If Not IsNumeric(Right(Range("H" & i).Value, 8)) Then
        Rows(i).EntireRow.Hidden = True
    End If
Next i

End Sub

enter image description here

答案 1 :(得分:2)

VBA的替代方法是使用Helper列。假设您的列表位于A列,从A2开始。你可以做到

=IF(ISERROR(NUMBERVALUE(RIGHT(A2,8))),"",A2)

然后向下拖动。然后对该列进行过滤,因为会有空白,其中最后8位数字不是数字。