尝试过滤长号码

我有一个有很多更长的数字的列。 我想过滤我所有的数字,不以2开头的列。我试图写在代码中select所有2的第一,但没有奏效。 然后我试图通过在Excel中手动执行,通过说,filter,自定义规则,不是从2开始,但没有任何变化。 例如,我没有看到数字之前的零。 我试图将他们重新格式化为数字,但他们已经是数字。 我不知道为什么它不是select以2开头的所有数字,也不是以2开头的所有数字。

这里是我试图让数字开始2的代码。

With ws1.Range("A1:Z" & UsdRws) .autofilter Field:=6, Criteria1:="2*", Operator:=xlFilterValues On Error Resume Next UsdRws = ws1.Range("C" & Rows.Count).End(xlUp).Row If UsdRws > 1 Then Range("A2:A" & UsdRws).SpecialCells(xlCellTypeVisible).EntireRow.Delete End If On Error GoTo 0 .autofilter Field:=9 Cells.EntireColumn.AutoFit End With 

filter不会改变任何东西,即使我有很多以2开头的数字。下面是我使用的数字的示例。

 2190190000 1410650400 1410720000 1410511900 1410650000 1410511900 1410650500 1410680100 1410650300 2190160000 1410650100 2190160000 2020110008 1410511900 1410650400 2020110002 2020180000 2010110100 1410671000 2190190000 1410650200 2020180000 2190190000 1410650400 1410720000 1410511900 1410650000 1410511900 1410650500 

所以就像我说的,我试图得到所有以2开头的数字或所有其他的数字,但似乎两者都不工作,即使使用自定义filter规则手工完成。

如果你所有的号码都是10位数字,那么以下内容似乎有效:

 Option Explicit Sub FilterTwos() Dim ws1 As Worksheet Dim r As Range Set ws1 = Worksheets("sheet1") With ws1 Set r = .Range("a2", Cells(.Rows.Count, "A").End(xlUp)) End With ws1.AutoFilterMode = False r.AutoFilter Field:=1, Criteria1:=">=2000000000", Operator:=xlAnd, _ Criteria2:="<3000000000" Set r = r.SpecialCells(xlCellTypeVisible) r.Copy Worksheets("sheet2").Range("B2") End Sub 

在您的With语句中,您使用UsdRws,但在“With”之前不要给UsdRws一个值。 这可能会导致你的问题?

你也可以尝试将数字视为string(将格式更改为文本?)。 这样,Excel不应该被它认为你应该或不应该用数字所做的事情所迷惑。

无论您的号码包含多less个数字,这都可以工作。 您的inputRange应该只是长数字的列,也包含标题。

 Sub Remove2() Dim inputRange As Range Dim v As Variant Dim i As Long, deleteCount As Long, min As Long Set inputRange = Sheet1.Range("A1:A10001") v = inputRange.Value min = Application.WorksheetFunction.min(inputRange) - 1 For i = 1 To UBound(v) If Left(v(i, 1), 1) = "2" Then v(i, 1) = min deleteCount = deleteCount + 1 End If Next i With inputRange .Value = v .Sort key1:=.Resize(1, 1), order1:=xlAscending, Header:=xlYes 'xlNo if no headers .Resize(deleteCount, 1).Offset(1, 0).EntireRow.Delete 'remove offset if no headers End With End Sub 

testing10000个数字需要0.4秒