Usuń cały wiersz, jeśli komórka zawiera ciąg x

Jestem nowy w VBA i próbuję wymyślić sposób na usunięcie wszystkich wierszy (i przesunięcie komórek w górę, jeśli to możliwe), gdzie komórka kolumny witryny zawiera słowo none. Tabela zawiera 5000 + rekordów i zaoszczędziłoby mi to dużo czasu.

Doceniam wszelkie sugestie. Z góry dziękuję!

Http://i39.tinypic.com/5ano1d.png

Author: ashleedawg, 2013-07-12

6 answers

To nie jest zadanie VBA - to konkretne zadanie najłatwiej wykonać za pomocą automatycznego filtra.

1.Wstaw filtr automatyczny (w Excelu 2010 kliknij Strona główna -> (Edycja) Sortuj i filtruj -> Filtr)
2. Filtruj w kolumnie "strony internetowe"
3. Zaznacz "brak" i usuń je
4. Wyczyść filtr

 68
Author: MBK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-18 08:21:07

Ok wiem, że to dla VBA, ale jeśli chcesz to zrobić dla jednorazowego usunięcia zbiorczego, możesz użyć następującej funkcjonalności Excela: http://blog.contextures.com/archives/2010/06/21/fast-way-to-find-and-delete-excel-rows / Hope this helps anyone

Przykład szukania ciągu "papier":

  1. w oknie dialogowym znajdź i zamień wpisz "paper" w polu Znajdź Co.
  2. Kliknij Znajdź wszystkie, aby zobaczyć listę komórek z "papierem"
  3. wybierz pozycję z listy i naciśnij Ctrl + A, aby wybrać całą listę i wybrać wszystkie" papierowe " komórki w arkuszu.
  4. na karcie Strona główna wstążki kliknij Usuń, a następnie kliknij Usuń wiersze arkusza.
 17
Author: Barry Carter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-02 12:20:48

W zakładce "Developer" przejdź do "Visual Basic" i utwórz moduł. Kopiuj wklej następujący tekst. Pamiętaj o zmianie kodu, w zależności od tego, co chcesz. Następnie uruchom moduł.

  Sub sbDelete_Rows_IF_Cell_Contains_String_Text_Value()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 390
    For iCntr = lRow To 1 Step -1
        If Cells(iCntr, 5).Value = "none" Then
            Rows(iCntr).Delete
        End If
    Next
    End Sub

LRow: umieść liczbę wierszy, które ma bieżący plik.

Liczba " 5 "W" If " jest dla piątej (E) Kolumny

 7
Author: Apolo Radomer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-01 09:29:03

Chciałbym dodać do odpowiedzi @MBK. Chociaż odpowiedź @MBK okazała się bardzo pomocna w rozwiązaniu podobnego problemu, lepiej byłoby, gdyby @MBK dodał zrzut ekranu, jak filtrować konkretną kolumnę.Tutaj wpisz opis obrazka

 5
Author: palmbardier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-08 16:13:38

To było nawiązanie do innego komentarza, ale można spróbować czegoś takiego.

Sub FilterAndDelete()

Application.DisplayAlerts = False 

     With Sheet1 'Change this to your sheet name

         .AutoFilterMode = False   
         .Range("A3:K3").AutoFilter
         .Range("A3:K3").AutoFilter Field:=5, Criteria1:="none"
         .UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete 

     End With

Application.DisplayAlerts = True

End Sub

Nie testowałem tego i jest to z pamięci, więc może wymagać pewnych poprawek, ale powinno wykonać zadanie bez zapętlania tysięcy wierszy. Musisz usunąć 11-Jul, aby UsedRange było poprawne lub zmienić przesunięcie na 2 wiersze zamiast 1 w .Offset(1,0).

Ogólnie, zanim zrobię .Delete uruchomię makro z .Select zamiast Delete w ten sposób mogę być pewien, że poprawny zakres zostanie usunięty, co może być warte sprawdzenia, aby upewnić się, że odpowiedni zakres jest usuwany.

 1
Author: Soulfire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-12 02:50:15

Spróbuj tego ...

Dim r as Range
Dim x as Integer

For x = 5000 to 4 step -1 '---> or change as you want //Thanx 4 KazJaw

  set r = range("E" & format(x))
  if ucase(r.Value) = "NONE" then
    Rows(x).EntireRow.Delete
  end if 

Next
 0
Author: matzone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-12 07:21:59