vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest piątek, 26 kwietnia 2025 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

usuwanie wierszy po wyfiltrowaniu


otwartyotwarty rozpoczął: saimon postów: 4



napisał: udios
postów: 9


umieszczony:
24 lipca 2010
13:37

  
trochę się pogubiłem.
Chcesz usunąć wszystko poza kolumną A czy wszystko oprócz wiersza 1.


jeżeli masz stworzoną tabelę w komórkach A1:Gx (x oznacza ostatni wiersz wypełnionymi danymi o nie znanej wartości w momencie pisania kodu), w kolumnie 1 znajduje się opis który ma zawsze pozostać, a usunięte mają być dane od wiersza 2giego w dół możesz spróbować takiego kodu:


int_zlicz_elem = Application.WorksheetFunction.CountA(Worksheets("Arkusz1").Range("A2:A65536")) + 1 ' zliczenie elementów znajdujących się w pierwszej kolumnie Od wiersza 2giego do ostatniego)
    str_adres_tekstowy = "A2:G" & int_zlicz_elem    ' stworzenie adresu tekstowego. zaznaczy komórki od wiersza 2giego do ostatniego w którym są dane w kolumnie od A do G
    Range(str_adres_tekstowy).Select        ' zaznacza obszar do skasowania
    Selection.ClearContents                 ' czyści zawartość komórek




Zastanawiam się czy nie masz problemu z filtrem Excela, miałem taki problem z nim, że po jednym użyciu filtra komórki ukrywały się i pozostawały cały czas nie widoczne.
Rozwiązaniem jest:
1. założenie na kolumnę filtrowaną filtra "=*" filtr pokazuje z powrotem wszystkie znaki.
2. wyłączenie filtra
Sheets("Arkusz1").AutoFilterMode = False  ' wyłacza autofiltr



Tu jest kawałek kodu który użyłem do kopiowania danych z jednego arkusza do drugiego, z jednoczesnym filtrowaniem i sortowaniem danych


Dim str_adres_tekstowy As String    ' zmienna w której wpisywane są adresy tekstowe komórek np A1:A10
Dim str_filtr As String             ' zmienna zawierająca wyrażenie filtrujące dane
Dim int_nr_kolumny_filtrującej As Integer   ' zawiera numer filtrowanej kolumny / liczbowa wartość
Dim str_nr_kol_sort As String   ' zawiera numer filtrowanej kolumny / literowa wartość
Dim str_filtr_rosn_malej As String

'użycie filtra danych
        
        
                
    str_filtr = Trim(frm_glowna.txt_spis_cz_filtr.Text)             ' pobranie i usunięcie spacji z tekstu filtrującego
    If str_filtr = "" Then
        str_filtr = "=*"                         ' jeżeli puste lub spacja ustawia =* jako wyświetlenie wszystkiego
    Else
        str_filtr = "=" & str_filtr & "*"        ' dodaje symbo "=" i na koniec "*" ( po w pisaniu w "a" mamy filtr "=a*" pokazuje wszystko co zaczyna się na literę "a")
    End If  'If str_filtr = ""
    
    
    int_nr_kolumny_filtrującej = frm_glowna.cbo_spis_cz_filtr.ListIndex + 1 ' wybranie nr kolumny filtrowanej ( + 1 bo cbo licznik ma od 0)
    
    
    frm_glowna.lbl_test_1.Caption = "filtr =/" & str_filtr & " // nr_kol= " & int_nr_kolumny_filtrującej

    'MsgBox "str_filtr = " & str_filtr & " // int_nr_kolumny_filtrującej = " & int_nr_kolumny_filtrującej
    
    
    Sheets("czesci_lista").Select
    Range("a10").Select
    Selection.AutoFilter Field:=int_nr_kolumny_filtrującej, Criteria1:=str_filtr, Operator:=xlAnd
    
        
        
'skopiowanie danych
        
        int_zlicz_elem = Application.WorksheetFunction.CountA(Worksheets("czesci_lista").Range("A11:A65536")) ' zliczenie elementów w tabeli
        str_adres_tekstowy = "A10:G" & int_zlicz_elem + 10 ( u mnie +10 bo moja tabela zaczyna się w wierszu 10tym)
        
  
        Sheets("temp").Select               'zaznaczenie arkusza docelowego
        Cells.Select                        ' zaznaczenie wszystkich komórek
        Selection.ClearContents             ' wyczyszczenie zaznaczonego
        
        Sheets("czesci_lista").Select       ' zaznaczenie arkusza źródła
        Range(str_adres_tekstowy).Select    ' zaznaczenie danych źródłowych
        Selection.Copy
        Sheets("temp").Select               ' docelowy arkusz
        Range("A10").Select                 ' docelowa pierwsza komórka
        ActiveSheet.Paste                   ' wklejenie
        
 
        Application.CutCopyMode = False                 ' czyści zawartość schowka
        Sheets("czesci_lista").AutoFilterMode = False  ' wyłacza autofiltr

  
'sortowanie danych

        int_zlicz_elem = Application.WorksheetFunction.CountA(Worksheets("temp").Range("A11:A65536")) ' zliczenie elementów w tabeli
        str_adres_tekstowy = "A10:G" & int_zlicz_elem + 10
        str_nr_kol_sort = Chr(64 + Sheets("czesci_lista").Cells(6, 5)) & "11"    ' gdy sort wg 2 kolumny będzie np "B11"

         
        If Sheets("czesci_lista").Cells(6, 6) = 0 Then                      ' sprawdzenie wybranego sortowania rosnące=1, malejące=0
            str_filtr_rosn_malej = "xlDescending"
            Range(str_adres_tekstowy).Sort Key1:=Range(str_nr_kol_sort), Order1:=xlDescending, Header:= _
                xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                DataOption1:=xlSortNormal
        Else
            str_filtr_rosn_malej = "xlAscending"
            Range(str_adres_tekstowy).Sort Key1:=Range(str_nr_kol_sort), Order1:=xlAscending, Header:= _
                xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                DataOption1:=xlSortNormal
        End If 'If Sheets("czesci_lista").Cells(6, 6) = 0



UdioS
napisał: grzechotnik
postów: 1


umieszczony:
23 lipca 2010
11:06

  
Witam,

Chciałem zapytać, a jak by wyglądało takie makro, które usuwałoby wszystkie zapisane komórki poza wierszem A.
mam takie narzędzie niedoskonałe, które fajnie filtruje dane i przekopiowuje je do arkusza2.
Niestety, zey zrobić nowe filtrowanie, trzeba ręcznie usunąć wiersze od A2 poniżej do ostatniego zapisanego.
(jak się usunie wiersz nagłówkowy w arkusz2 to przestaje banglać.)

Zrobiłem sobie taki przycisk do usuwania i grzebię w waszych zapiskać próbując je zmodyfikować...
- dopiero uczę się vba...
dziękuję za pomoc...

grzechotnik
napisał: saimon
postów: 32


umieszczony:
19 września 2008
11:55

  
mam następujący problem z VBA - chciałbym usunąć wszystkie wiersze arkusza, dla których w kolumnie I pojawia się wartość "FAŁSZ" -filtruje więc wartości:
Selection.AutoFilter Field:=9, Criteria1:="FAŁSZ"


i teraz nie wiem jaką komendą zaznaczyć ten zakres (będzie się on zmieniał w zależności od tego jakie dane zostanę wklejone)
poźniej zaznaczone wartości możnaby chyba skasować przy pomocy:
Selection.EntireRow.Delete



<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z