Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel vba - wyszukanie i kopiowanie wierszy do arkusza vba

mariuszlis1 11 Paź 2012 20:11 7425 12
  • #1 11 Paź 2012 20:11
    mariuszlis1
    Poziom 7  

    Witam
    Bardzo proszę o pomoc. Niestety moje umiejętności z vba nie są na najwyższym poziomie, a poniższe makro bardzo przyspieszyło by mi pracę.

    Często muszę tworzyć raport z wszystkich lat, dla szukanej przeze mnie nazwy ulicy.
    W załączeniu przesyłam plik z czterema arkuszami.
    Potrzebuję makro, które wyszukuje wiersze po nazwie ulicy. Nazwa ulicy znajduje się w każdym arkuszu w kolumnie E. Każdy odnaleziony wiersz, który posiada w kolumnie E nazwę szukanej przeze mnie ulicy, powinien być kopiowany do arkusza o nazwie RAPORT.
    W moim prawdziwym pliku ilość wierszy w każdym arkuszu jest zmienna (co jakiś czas są dopisywane nowe wiersze) czyli makro powinno przeszukać kolumnę E, do momentu aż napotka pustą komórkę, a następnie powinno przejść do następnych arkuszy i zrobić to samo.
    W moim prawdziwym pliku mam 12 arkuszy do przeszukania.
    Z każdym nowym rokiem będę musiał dostawiać nowe arkusze - ale w tym przypadku mógłbym sobie sam modyfikować makro aby zwiększyć jego zakres.
    PS:
    Aby system przeszukiwał arkusze po nazwie interesującej mnie ulicy, muszę ją podać. Ważne jest abym nie musiał podawać całej nazwy ulicy, a jedynie kilka pierwszych liter.
    Przykładem może być ulica Borkowska. Chciałbym aby wystarczyło podać niepełną nazwę ulicy np Borkow lub Bork lub Borkowsk itp.
    Nazwy ulic w kolumnie E powtarzają się.

    Z góry bardzo dziękuję zainteresowanym i pozdrawiam

    0 12
  • #2 11 Paź 2012 20:45
    adamas_nt
    Moderator Programowanie

    W takim przypadku potrzebne są dwie pętle. Pierwsza For dla wszystkich arkuszy, których nazwa <>"RAPORT", wewnętrzna Do While...Loop z licznikiem dla Nr wiersza i instrukcją porównująca zawartość komórki, Np: If Instr(Cells(wiersz, 5).text, szukany_fragment)>0 Then i tu kopiowanie.
    Szukaną można pobrać przez InputBox.

    0
  • #3 11 Paź 2012 20:57
    mariuszlis1
    Poziom 7  

    Bardzo dziękuję za szybką odpowiedź. Niestety temat mnie przerasta i chyba Twoje wskazówki mi nie wiele pomogą. Jeśli znalazł by ktoś trochę czasu aby napisać mi makro to będę bardzo wdzięczny. Chcę tym makrem zautomatyzować prace w administracji publicznej - przynajmniej trochę przyśpieszy to prace.

    pozdrawiam

    0
  • Pomocny post
    #4 12 Paź 2012 10:59
    tomekptk
    Poziom 11  

    Tu masz kod tego makra. Procedurę SzukajUlicy() podepnij pod jakis przycisk. Myślę, że z resztą sobie poradzisz.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #5 12 Paź 2012 15:30
    mariuszlis1
    Poziom 7  

    Dzięki,
    makro jest bardzo dobre. Niestety przeszukuje tylko ten arkusz w którym je uruchomię. Bardzo proszę o jeszcze jedną modyfikację: Aby makro przeszukało arkusz pierwszy o nazwie 2010, później arkusz drugi o nazwie 2011 i arkusz trzeci o nazwie 2012. Po przeszukaniu każdego arkusza niech kopiuje wiersze jeden pod drugim do arkusza o nazwie RAZEM, ale zaczynając wklejanie od drugiego wiersza. W pierwszym wierszu arkusza RAZEM mam nazwy nagłówków.
    Powyższe makro jest super, brakuje tak niewiele do sukcesu. Wielkie dzięki tomekptk!

    0
  • #6 12 Paź 2012 19:37
    tomekptk
    Poziom 11  

    Ćwiczyłem na tym Twoim skoroszycie i makro działało na wszystkich arkuszach.
    Uruchamiałem je z arkusza RAPORT i znajdował ulice w innych arkuszach, ale należałoby zamiast lWiersz dołożyć dodatkową zmienną sterującą pozycją wiersza w arkuszu RAPORT, bo wynik będzie rozstrzelony po wielu wierszach. Ale chyba sobie z tym poradzisz. Dzięki za punkty!

    1
  • #7 12 Paź 2012 21:13
    mariuszlis1
    Poziom 7  

    Niestety jestem bardzo początkujący. nie wiem jak dodać dodatkową zamienną. Nie wiem czy dobrze wszystko opisałem, ale potrzebuję aby w arkuszu RAPORT znalazły się wiersze z wszystkich lat dla szukanej przeze mnie ulicy. Np. ul Jasna występuje w pierwszym arkuszu 1raz, w drugim 3 razy, w trzecim 1raz - w arkuszu RAPORT powinno się wkleić 5 wierszy jeden pod drugim.
    bardzo proszę o uzupełnienie makra. Mam nadzieję że to nie jest dużo pracy. Pozdrawiam

    0
  • #8 12 Paź 2012 23:11
    adamas_nt
    Moderator Programowanie

    Problem w tym, że wiersz źródłowy i docelowy przypisane są do tej samej zmiennej. Wiersz źródłowy powinien być "resetowany" przed pętlą Do, a inkrementacja docelowego realizowana wewnątrz instrukcji If.
    Prościej byłoby kopiować całe wiersze. Ewentualnie komórki wiersza w pętli For, gdzie licznikiem byłby Nr kolumny (2-23). Przydałaby się również Lp w kolumnie 1 (wiersz docelowy -1 ). Ale to tylko ot tak, na mój "chłopski rozum"...

    0
  • #9 12 Paź 2012 23:19
    mariuszlis1
    Poziom 7  

    Jeśli prościej jest kopiować całe wiersze to jeszcze lepiej bo miałem rozszerzyć zakres. Najważniejsze jest dla mnie aby znalazły się one w arkuszu raport, ale niestety to mnie przerasta...

    0
  • #11 16 Paź 2012 08:52
    mariuszlis1
    Poziom 7  

    Wielkie dzięki za to makro - jest świetne. Właśnie o to mi chodziło. A co należy dopisać aby makro kopiowało wiersze z formatowaniem. W niektórych komórkach mam też hiperłącza, a są kopiowane jako tekst.
    Jeszcze raz dziękuję za pomoc!

    0
  • #12 16 Paź 2012 09:09
    adamas_nt
    Moderator Programowanie

    Kopiuj całe wiersze. Odpowiednia linia jest w makro w załączniku. Usuń apostrof opisanej linii, wyrzuć/zaapostrofuj trzy następne (od For do Next).

    2
  • #13 12 Lis 2012 08:12
    mariuszlis1
    Poziom 7  

    Temat został bardzo dobrze rozwiązany przez adamas_nt. Wielkie dzięki !

    0
  Szukaj w 5mln produktów