logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Excel vba - wyszukanie i kopiowanie wierszy do arkusza vba

mariuszlis1 11 Paź 2012 20:11 9084 12
REKLAMA
  • #1 11401678
    mariuszlis1
    Poziom 9  
    Posty: 12
    Ocena: 1
    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
    Załączniki:
    • Wyszukiwanie.xls (116.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 11401878
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    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.
  • #3 11401950
    mariuszlis1
    Poziom 9  
    Posty: 12
    Ocena: 1
    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
  • Pomocny post
    #4 11403282
    tomekptk
    Poziom 19  
    Posty: 212
    Pomógł: 40
    Ocena: 96
    Tu masz kod tego makra. Procedurę SzukajUlicy() podepnij pod jakis przycisk. Myślę, że z resztą sobie poradzisz.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #5 11404076
    mariuszlis1
    Poziom 9  
    Posty: 12
    Ocena: 1
    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!
  • REKLAMA
  • #6 11404838
    tomekptk
    Poziom 19  
    Posty: 212
    Pomógł: 40
    Ocena: 96
    Ć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!
  • #7 11405201
    mariuszlis1
    Poziom 9  
    Posty: 12
    Ocena: 1
    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
  • #8 11405689
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    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"...
  • #9 11405710
    mariuszlis1
    Poziom 9  
    Posty: 12
    Ocena: 1
    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...
  • REKLAMA
  • #10 11405748
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    W załączniku makro uzupełnione w w/w

    Edit: zmieniłem załącznik (różny format daty - ujednoliciłem)
    Załączniki:
    • Wyszukiwanie(1).xls (137.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #11 11416422
    mariuszlis1
    Poziom 9  
    Posty: 12
    Ocena: 1
    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!
  • #12 11416453
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    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).
  • #13 11518753
    mariuszlis1
    Poziom 9  
    Posty: 12
    Ocena: 1
    Temat został bardzo dobrze rozwiązany przez adamas_nt. Wielkie dzięki !

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukiwał pomocy w stworzeniu makra VBA, które przeszukiwałoby wiersze w arkuszach Excela w celu znalezienia nazw ulic w kolumnie E i kopiowało je do arkusza o nazwie "RAPORT". W odpowiedziach zasugerowano użycie dwóch pętli: zewnętrznej do iteracji przez arkusze oraz wewnętrznej do przeszukiwania wierszy. Użytkownik prosił o modyfikację makra, aby przeszukiwało wszystkie arkusze, a nie tylko ten, w którym zostało uruchomione. Ostatecznie, po kilku iteracjach i poprawkach, użytkownik otrzymał działające makro, które spełniało jego wymagania, w tym kopiowanie wierszy z formatowaniem i hiperłączami.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA