我正在尝试使用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),但没有一行被删除
答案 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