2015-06-12 3 views
0

Я новичок, чтобы преуспеть сценарии/macroingExcel удалить строки, которые имеют определенные слова в колонке

У меня есть массивный первенствовать лист, и мне нужно, чтобы удалить некоторые строки из него.

Любые строки, которые имеют слова: кошки, собаки, лошади, рыбы

Пытались что-то вроде этого (а также довольно много других atempts).

Sub DeleteRows() 
    Dim c As Range 
    Dim SrchRng 

    Set SrchRng = ActiveSheet.Range("A1", ActiveSheet.Range("A65536").End(xlUp)) 
    Do 
     Set c = SrchRng.Find("dog","cat","horse","fish", LookIn:=xlValues) 
     If Not c Is Nothing Then c.EntireRow.Delete 
    Loop While Not c Is Nothing 
End Sub 

Некоторые детали (так как я не уверен, какая информация действительно нужна).

Эти слова всегда будут находиться в 2-й колонке (но это может быть что-то вроде «The George рыбы», и это нужно будет удалить эту строку.

Любая помощь будет здорово, спасибо!

+0

Вам нужно добавить 'LookAt: = xlPart', чтобы найти частичные совпадения. – Chrismas007

ответ

0

Исполнив это без помощи макросов или сценариев.

на закладке Данные выберите фильтр, а затем выберите фильтр, содержащий слова.

Введите слова, а затем просто удалить все строки, которые отображаются на экране.

Ответ на вопрос, если у кого-либо еще есть эта проблема в будущем!

0

Это работает.

Sub DeleteRows() 

Dim ws As Worksheet 
Dim lastRow As Long 
Dim lookAt As Range, thisCell As Range, nextCell As Range 
Dim keyWord(0 To 3) As String, targetColumn As String 
Dim i As Integer 

keyWord(0) = "cat" 
keyWord(1) = "dog" 
keyWord(2) = "horse" 
keyWord(3) = "fish" 

On Error GoTo Err 

Set ws = Application.ActiveSheet 

'get last populated row number 
With ws 
    If WorksheetFunction.CountA(Cells) > 0 Then 
     lastRow = Cells.Find(what:="*", SearchOrder:=xlByRows, _ 
     SearchDirection:=xlPrevious).Row 
    End If 
End With 

'define the target column 
targetColumn = "A" 
Set lookAt = ActiveSheet.Range(targetColumn & "1:" & targetColumn & lastRow) 

'for each item in keyWord array 
For i = LBound(keyWord) To UBound(keyWord) 
    'look for that word throughout range 
    Set thisCell = lookAt.Find(what:=keyWord(i), LookIn:=xlValues, lookAt:=xlPart, SearchDirection:=xlNext) 
     If Not thisCell Is Nothing Then 
      Set nextCell = thisCell 
      Do 
       Set thisCell = lookAt.FindNext(After:=thisCell) 
       If Not thisCell Is Nothing Then 
        If InStr(1, thisCell.Text, keyWord(i)) Then 
         thisCell.ClearContents 
        End If 
       Else 
        Exit Do 
       End If 
      Loop 
     End If 
Next i 

' delete empty rows 
On Error Resume Next 
    Range(targetColumn & "1:" & targetColumn & lastRow).Select 
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete 

Err: 
    Exit Sub 

End Sub 
Смежные вопросы