0

特定の行 (列に特定の単語を含む) を削除する VBA コードを記述します。私は下にあるものを持っています。以前に削除された2つの行(小計)の間にあるすべての行も削除することに問題があります(*これがそれらの間の1行のみであることを条件として、それらを削除しない場合)

この問題を克服する方法があれば教えてください。この質問があいまいな場合はお知らせください(私は初心者なので)

Sub DeleteRows()
Dim c As Range
Dim SrchRng As Range
Dim SrchStr As String

Set SrchRng = ActiveSheet.Range("F1", ActiveSheet.Range("F10000").End(xlUp))
SrchStr = InputBox("Please Enter A Search String")
Do
    Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
    If Not c Is Nothing Then c.EntireRow.Delete
Loop While Not c Is Nothing

End Sub
4

1 に答える 1

0

対象の列 (この場合は F) を取得し、ユーザーに削除する文字列を指定するように求めています。これは、このメソッドを巧妙に使用するための完璧なレシピのように思えますRange.Autofilter。(MSDN リンクは次のとおりです: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.autofilter(VS.80).aspx )

操作しているデータのブロックが A:F から始まると仮定すると、次のように書くことができます。

Option Explicit
Sub DeleteRowsWithAutoFilter()

Dim DataRng As Range, DeleteMe As Range
Dim SrchStr As String

'set references up-front
Set DataRng = ActiveSheet.Range("A1", ActiveSheet.Range("F10000").End(xlUp))
SrchStr = InputBox("Please Enter A Search String")

'turn off alerts for delete action
Application.DisplayAlerts = False
DataRng.AutoFilter Field:=6, Criteria1:=SrchStr '<~ apply autofilter
With DataRng
    Set DeleteMe = .Offset(1, 0) '<~ set the delete range
    DeleteMe.Delete
End With
ActiveSheet.AutoFilterMode = False
Application.DisplayAlerts = True

End Sub
于 2014-05-22T20:20:15.803 に答える