オンラインとここで検索しましたが、法案に適合し、機能していると思われるものが見つかりません。動作するコードがいくつかありますが、行を削除すると範囲の長さが変わるため、削除するすべての行をキャッチできないため、何度か実行することになります。これは素晴らしいことではありません...だから私はmこのスレッドで推奨されているように、オートフィルターアプローチを試しています。
いくつかの列があるスプレッドシートがあり、そのうちの1つは「コスト」です。'cost'列(列9、場合によっては10、したがって下の' find'ビット)を調べて、コストが0である行を削除する必要があります。
以下は私がこれまでに書いたコードです、どんな助けでも非常に、非常にありがたいです!!!!
--編集3:さらにいくつかのコード変更が行われました...新しいコードは以下のとおりです。
Sub RemoveRows()
Dim cell As Range
Dim lastRow As Long
Dim lastColumn As Integer
Dim criteraColumn As Integer
Dim criteriaRange As Range
lastRow = Cells.Find(What:="*", After:=Range("A1"), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
lastColumn = Cells.Find(What:="*", After:=Range("A1"), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Rows(1).EntireRow.Select
criteriaColumn = Selection.Find(What:="Cost", After:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Column
Set criteriaRange = Range("A1", Cells(lastRow, lastColumn))
criteriaRange.AutoFilter Field:=criteriaColumn, Criteria1:="£0.00"
AutoFilter.Range.Delete
ActiveSheet.AutoFilterMode = False
End Sub
これを実行すると、正しい範囲と正しい列にフィルターが適用されます。次に、その行に適用される「ランタイムエラー '424':オブジェクトが必要です」というエラーメッセージが表示されますAutoFilter.Range.Delete
。これで「end」または「debug」を押してスプレッドシートを見ると、フィルターが正しい列に適用され、正しいオプション(£0.00)がチェックされていますが、結果は返されません(実行する必要があることはわかっています)将来この状況が発生した場合のエラー処理がいくつかありますが、現時点では、このフィルターによって少なくとも10行が返されるはずです)。スプレッドシートのフィルター設定で手動で[OK]を押すと(変更せずに!)、10個の結果が正しく表示されるので、プログラムでこれを行ったときになぜ表示されないのかわかりません。
必要に応じてスプレッドシートの例を提供してください、これは本当に私を混乱させます!!
スプレッドシートはここにあります