2015-04-13 5 views
0

У меня есть следующая функция VBA, где она найдет информацию, введенную в поле ввода, и удалит каждую строку с этим значением.Изменение функции VBA для удаления строк

Как его изменить, чтобы удалить все строки, кроме введенного значения. Пример входит 123. Я хочу, чтобы удалить все строки для ячеек в столбце B, за исключением с 123.

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

    Set SrchRng = ActiveSheet.Range("B1", ActiveSheet.Range("B4343").End(xlUp)) 
    SrchStr = InputBox("Please Enter Value") 
    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 

ответ

0

OK вполне может быть лучшим способом сделать это, но я пошел с созданием временного листа, копия в строках, которые соответствуют поисковому запросу, удалите все строки в листе и, наконец, скопировать обратно строки, -ие затем удалите временный лист:

Sub DeleteRows() 
    Dim c As Range, b As Range, SrchRng As Range, SrchStr As String, MasterSheet As Worksheet, TempSheet As Worksheet 
    Set MasterSheet = ActiveSheet 
    Set SrchRng = ActiveSheet.Range("A1", ActiveSheet.Range("A4343").End(xlUp)) 
    SrchStr = InputBox("Please Enter Value") 
    Worksheets.Add 
    Set TempSheet = ActiveSheet 
    MasterSheet.Select 
    Set c = SrchRng.Find(SrchStr, LookIn:=xlValues) 
    Set b = c 
    Do 
     If Not c Is Nothing Then 
      c.EntireRow.Copy 
      TempSheet.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll 
     End If 
     Set c = SrchRng.FindNext(After:=c) 
     If c.Address = b.Address Then Exit Do 
    Loop While Not c Is Nothing 
    Range("A2:A" & Rows.Count).EntireRow.ClearContents 
    TempSheet.Range("A2:A" & TempSheet.Range("A" & Rows.Count).End(xlUp).Row).EntireRow.Copy 
    ActiveSheet.Range("A2:A" & TempSheet.Range("A" & Rows.Count).End(xlUp).Row).PasteSpecial xlPasteAll 
    Application.DisplayAlerts = False 
    TempSheet.Delete 
    Application.DisplayAlerts = True 
End Sub 

Надежда, что помогает.

Я начал играть, пытаясь заполнить массив из результатов поиска одним движением, не зацикливая его, но это не пошло хорошо, и у меня закончилось свободное время, чтобы исследовать это, к сожалению. Моя идея состояла в том, чтобы попытаться заполнить массив из результатов за один раз, затем выбрать все строки минус что угодно в объединенном массиве, а затем удалить. Не уверен, насколько это возможно, но, возможно, изучить его, если вы получите время.

В моих тестовых данных использовалась колонка A, вам нужно будет изменить несколько частей для колонки B.

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