0

オートフィルターを使用して、列に特定の値を含むすべての行を削除しようとしています。なんらかの理由で意図したとおりに動作せず、指定された値を持つ行の一部のみが削除されます。その理由を突き止めることにしました

私のコードは次のように簡単です:

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) があることを認識しますが、どれも削除されません。

4

2 に答える 2

1

UsedRange信頼できるかどうかはわかりません。次のようなものを使用してみてくださいRange("A1").CurrentRegion

于 2013-03-05T16:50:28.847 に答える
1

8192 行未満 (Excel 2010 より前) の場合、特殊セルを使用して削除できますか?

テストする値が行に含まれている場合にエラーをスローする数式列を追加します。

これを試して:

' これで、この数式は、列が条件に一致する各行に #N/A を配置します。

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

'次に、SpecialCells をエラー コード xlErrors と共に使用して、削除する行を含む範囲を返します。

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

Oxgrid HTHでそれについての詳細があります

フィリップ

于 2013-03-05T16:22:57.420 に答える