Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[VBA - Excel] Filtrowanie komórek

Typowy_Lef 27 Maj 2012 19:39 4743 3
  • #1 27 Maj 2012 19:39
    Typowy_Lef
    Poziom 2  

    Witam wszystkich.

    Jestem totalnym lajkonikiem ;) jeśli chodzi o visual basic a chciałbym zbudować makro, które filtrowałoby całe zestawienie pod kątem jednej kolumny a następnie kopiowało pozycje do innego arkusza.

    Chodzi mi o to, żeby wszystkie pozycje, które (załóżmy) w kolumnie E mają wartość TAK/NIE zostały wklejone w inne miejsce.

    Nie wiem jak się do tego zabrać. Może jakieś rozwinięcie "IF...then" ?

    Wiem, że najłatwiej posłużyć się filtrem dostępnym w excelu ale akurat nie o to mi chodzi.

    Pozdrawiam

    Dodano po 58 [minuty]:

    NA razie jestem w stanie wymyślić coś takiego

    Cytat:

    Sub Makro1()

    If Range("F1").Text <> nie Then
    ActiveSheet.Rows(2).Select
    Selection.Copy
    Sheets("Arkusz3").Select
    End If

    End Sub


    Założenie było takie, żeby kopiował wszystkie wiersze w których w kolumnie F była wartość "tak" ale w takiej formie kopiuje wszystko niezależnie od "<>".

    0 3
  • #2 28 Maj 2012 09:12
    pitermxa
    Poziom 17  

    Wydaje mi się, że wystarczyło by użyć funkcji wyszukaj.pionowo.
    1. po pierwsze wartości z kolumny e (tak/nie) muszą się znaleźć pierwszej kolumnie Twojego arkusza z danymi (jeżeli w pierwsze kolumnie "A" znajdują się już jakieś wartość to musisz wstawić nową kolumnę i teraz w komórce A1 wpisujesz formułę "= F1" ("F" ponieważ po wstawieniu kolumny wszystko przesunie Ci się o jedną kolumnę w prawo) Następnie przeciągasz komórkę A1 do końca Twojej tabeli z danymi.
    2. W arkuszu, w którym chcesz żeby Ci się pokazały wyniki Twojego filtrowania używasz funkcji wyszukaj.pionowo. Funkcja ta ma 4 parametry do wypełnienia.

    Pierwszy to element którego szukasz (tutaj możesz wpisać np stały adres komórki np "$G$1" - i w tej komórce (w arkuszu w którym otrzymujesz wyniki) umieszczasz tekst, który chcesz wyszujać czyli "tak","nie", lub "tak/nie" możesz też sobie zrobić listę rozwijaną).

    O reszcie poczytaj w pomocy. Tam jest dosyć obszernie i przystępnie rozpisana ta funkcja. Jeżeli chcesz, żeby Ci zwracało w arkuszu wyjściowym więcej danych niż z jednej kolumny, będziesz musiał skopiować swoją fukncję wyszukaj.pionowo do kolumn obok i zmienić 3 parametr tej funkcji.

    Jeżeli nie za bardzo znasz się na VBA lepiej podszkolić się w funkcjach wbudowanych w excelu, ponieważ przy takich mało skomplikowanych operacjach, nie jest niezbędne użycie VBA.

    0
  • #3 28 Maj 2012 11:05
    walek33
    Poziom 28  

    Cytat:
    Założenie było takie, żeby kopiował wszystkie wiersze w których w kolumnie F była wartość "tak" ale w takiej formie kopiuje wszystko niezależnie od "<>".

    Założenie było w miarę dobre. Z realizacją trochę gorzej. Makro działa tak jak je napisałeś tj. porównuje wartość komórki F1 z wartością zmiennej nazwanej przez Ciebie nie. Jeżeli chcesz aby to rzeczone nie było wartością do porównania ubierz je w cudzysłów "nie". Żeby uniknąć takich niespodzianek (niezamierzone użycie zmiennej) w przyszłości na początku modułu wstawiaj Option Explicit. Wtedy przy uruchamianiu makra dostaniesz komunikat, że chcesz użyć zmiennej bez jej wcześniejszego zadeklarowania.

    0
  • #4 28 Maj 2012 19:44
    Typowy_Lef
    Poziom 2  

    Dobra już sobie poradziłem.

    A zrobiłem to tak:

    Cytat:

    Sub Makro1()

    Sheets("Arkusz1").Select
    Cells.Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=7, Criteria1:="tak"
    Sheets("Arkusz1").Select
    Selection.Copy
    Sheets("Arkusz2").Select
    Cells("1").Select
    ActiveSheet.Paste

    End Sub


    Działa elegancko.

    Pozdrawiam

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo