自动过滤器未按预期工作

时间:2013-03-05 12:29:37

标签: excel vba excel-vba

我正在尝试使用autofilter删除列中包含特定值的所有行。由于某种原因,它不能按预期工作,只删除一些具有指定值的行,我决定找出为什么

我的代码就像这样简单:

Function GetRowRange(sheet, column, value) As Range
'check for a valid section column
sheet.AutoFilterMode = False
sheet.UsedRange.AutoFilter Field:=column, Criteria1:=value
Set GetRowRange = sheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
sheet.AutoFilterMode = False
End Function

<击>

<击>
With GetRowRange(importsheet, importsheet.UsedRange.Find("stato_4").column, "0")
    .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Delete
End With

<击>

更新 这没有道理。我尝试将删除功能更改为:

For Each Row In GetRowRange(importsheet, importsheet.UsedRange.Find("stato_4").column, "0").Offset(1, 0).Rows
    Row.EntireRow.Delete
    iront = iront + 1
Next
MsgBox iront

它会识别出范围内有42行(iront = 42),但没有一行被删除

2 个答案:

答案 0 :(得分:1)

我认为如果您的行少于8192行(Excel 2010之前),您可以使用特殊单元格删除它们吗?

添加一个公式列,如果该行包含您要测试的值,则会抛出错误。

尝试这个:

'现在,此公式将在列符合条件的每一行中放置#N / A.

    Range("C1:C" & Range("A1").End(xlDown).Row).FormulaR1C1 = "=IF(C[-2]=criteria,NA(),"""")"

'然后使用带错误代码xlErrors的SpecialCells返回包含要删除的行的范围。

    Range("C1:C" & Range("A1").end(xldown).row).SpecialCells(xlCellTypeFormulas,xlErrors).entirerow.delete

Oxgrid上有更多内容 HTH

菲利普

答案 1 :(得分:1)

不确定UsedRange是否可靠。尝试使用Range("A1").CurrentRegion

之类的内容