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

Excel- Łączenie list z wielu kolumn

01 Lut 2013 20:36 4080 20
  • Poziom 23  
    Witam.
    Mam ogromną prośbę o pomoc przy poniższym kodzie. Kod ma za zadanie utworzyć wspólną listę w kolumnie 'V' dla kolumn 'R i S' (oczywiście kod w poniższej postaci działa jak najbardziej poprawnie). Proszę pomóżcie mi jak zmienić ten kod aby utworzył wspólną listę nie dla dwóch kolumn 'R i S' ale dla pięciu kolumn 'Q, R, S, T i U'. Niestety nie potrafię sobie z tym poradzić. Proszę o pomoc.

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Wspólna lista miałaby być dla symboli:

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Moderator Programowanie
    Zdaje się, że jest odwrotnie niż opisujesz... Składasz warunkowo jedną listę (w kolumnie "V") z dwóch. Na jakich warunkach (kolejne Else lub ElseIf) miałaby być składana z pięciu?
  • Poziom 23  
    Może nie jasno to wyjaśniłem. adamas_nt masz rację, w kolumnie 'V' kod składa listę w całość z dwóch kolumn 'R i S'. Ja potrzebuję aby kod w kolumnie 'V' złożył listę z pięciu kolumn 'Q, R, S, T i U'. Proszę o pomoc w przerobieniu kodu.
  • Poziom 23  
    Czy mogę się przypomnieć o pomoc w rozwiązaniu problemu?
  • Poziom 38  
    A ja ponowię pytanie kolegi adamas_nt - jakie jest kryterium "składania"? W programie, który pokazałeś są jakieś dziwne warunki...
    Chodzi o to, żeby na przykład w komórce V1 był tekst stanowiący sumę tekstów z komórek Q1, R1, S1, T1 i U1?
  • Poziom 23  
    Jeszcze raz. Powyższy kod ma za zadanie aby listy zawarte w kolumnach od 'R3' i od 'S3' zastały połączone i wklejony do kolumny 'V' zaczynając od wiersza 3. Ja potrzebuję zmienić ten kod tak aby połączył ze sobą listy z kolumn 'Q, R, S, T i U' i wkleił do kolumny 'V'. W sumie to kod może wyglądać jakkolwiek inaczej byle połączy te listy. W szczególności liczę na pomoc ze strony kolegi adamas_nt ponieważ to On kiedyś napisał ten kod, plik do którego został napisany kod bardzo się do dziś rozbudował i mam potrzebę rozszerzyć tą listę. Ale jeśli z tym kodem poradzi sobie ktokolwiek inny to będę bardzo wdzięczny :D
  • Poziom 40  
    Ja również ponowie pytanie o warunek połączenia.
    I czy dobrze ciebie rozumiem: "Połączyć" w tym przypadku znaczy że w kolumnie V mają być wszystkie dane z kolumny R i kolumny S. (Nie na zasadzie w R3="Mama" w S3="Tata" to w V3="MamaTata" )

    Nie do końca to prawda co piszesz:
    JaroFon napisał:
    ... Powyższy kod ma za zadanie aby listy zawarte w kolumnach od 'R3' i od 'S3' zastały połączone i wklejony do kolumny 'V' zaczynając od wiersza 3...


    Masz rację że ma połączyć ale .... robi to w specyficzny sposób.

    "Przeczytam" ci co wynika z powyższego kodu.

    Jeżeli wpis w 3 komórce z kolumny R (R3) jest mniejszy od wpisu w 3 komórce kolumny S (S3) lub S3 jest puste wtedy wpisz w V3 wartość z R3
    Gdyby jednak R3 było równe lub większe od S3 wtedy wpisz w V3 wartość z S3

    i tak dalej (w specyficzny sposób zmieniając numerację wierszy) aż do końca wszystkich danych w kolumnie R

    I stąd nasze pytanie: Jakie są warunki do tego nowego "połączenia"?


    Chyba że to powyżej (ten kod) nie jest warunkiem tworzenia listy a ma za zadanie alfabetyczne/rosnące ułożenie danych w liście wynikowej z pominięciem duplikatów.(Chociaż po teście zauważyłem że nie likwiduje duplikatów ani nie jest do końca alfabetycznie/rosnąco - chyba że listy wcześniej są specyficznie układane ale wtedy po co ta "kombinacja")

    Wtedy podając przykład trochę zaciemniłeś rozwiązanie.
  • Poziom 23  
    Właśnie dlatego napisałem że nie potrafię sobie poradzić z tym kodem, kod jest napisany swego czasu przez kolegę adamas_nt. Może jeszcze raz wyjaśnię. W kolumnach 'R i S' począwszy od wiersza 3 są tworzone alfabetycznie listy pracowników (nazwisko, imię i numer znaczka tego typu: Kowalski Marian 12345/6 tak jak widać na screenie). Powyższy kod łączy dwie listy z kolumn 'R i S' i wkleja tą połączoną listę ułożoną alfabetycznie do kolumny 'V' (sorry ale wcześniej nie napisałem o układaniu alfabetycznym). Ja potrzebuję rozszerzyć działanie tego kodu tak aby połączył widoczne na screenie listy z kolumn od 'Q do U'. Proszę o pomoc.

    Excel- Łączenie list z wielu kolumn

    Jeśli chodzi o duplikaty to takowych nie ma w tych pięciu kolumnach
  • Poziom 40  
    Nie chcę za bardzo wchodzić w pomysł kolegi adamasa bo nie wiem co było głównym celem i dlaczego to zrobił tak a nie inaczej.
    Zaproponuje trochę inne rozwiązanie, ale ponieważ nie znam całego kodu i intencji arkusza może być kłopot z działaniem (np wcześniejsza ochrona arkusza)
    Zakładam jak piszesz, że nazwiska w danych kolumnach są posortowane a właściwie że nie ma między nimi "pustych" dziur danych bo inaczej moje makro po takiej dziurze (pustej komórce) nie uwzględni dalszych danych z tej kolumny.

    Chodzi o to że zaproponuje wykorzystanie sortowania excelowskiego. Niestety to rozwiązanie generuje konieczność by sortowane "rzeczy" były w aktywnym na daną chwilę arkuszu, więc "przełączam" się [Activate] na ten arkusz (mam nadzieje że nie jest ukryty).

    Jeżeli przełączenie nie powinno pozostać wystarczy zaktywować arkusz z którego wywołąło się procedurę np wpisując na końcu poniższego kodu tak:
    Sheets("Nazwa arkusza wywołania").Activate

    Makro zbiera najpierw wszystkich pracowników w kolumnie V (22) a potem ją sortuje.

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 23  
    Niestety kod już w pierwszej linijce wywala błąd. Może podam jak wygląda kod w całości, może na podstawie niego coś da się zauważyć istotnego i przydatnego:

    Kod: vb
    Zaloguj się, aby zobaczyć kod



    ...krótki opis: kod w pierwszej kolejności tworzy 5 list w kolumnach 'Q do U' a potem tworzy wspólną listę dla kolumny 'R i S' w kolumnie 'V' no i przy okazji wszystkie listy zostają nazwane
  • Pomocny post
    Poziom 40  
    W pierwszej linii wywala bo nazwałem zmienne tak samo jak były nazwane i zadeklarowane wcześniej.
    Zmień na:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Teraz sprawdz czy ruszy i ewentualnie przy błędzie podaj oprócz linii błędu komunikat excela (w stylu "Type mismatch" czy coś co krzyknie excel)

    dodałem
    ThisWorkbook.Names.Add Name:="lstWszyscy", RefersTo:=Sheets("Admin").Range("V3:V" & jj - 1)
    przed end with choć włąściwie dla zasady powinien za end with bo i tak z "tego" nie korzysta

    Zauważ że w tej linii kodu jest zmiana ze zmiennej z której ja nie korzystam dstW na jj
  • Poziom 23  
    Niestety lista nie została utworzona. Kolumna 'V' jest pusta :( (żaden błąd nie wyskoczył)
  • Poziom 40  
    Sprawdz jeszcze raz bo w międzyczasie poprawiałem kod (chodzi o ostatnią linię).

    po uruchomieniu makra w arkuszu Admin kolumna V jest pusta a kolumny Q,R,S,T,U mają dane?
  • Poziom 23  
    Tak, wszystkie kolumn mają listy oprócz kolumny 'V'. Sprawdziłem kod jeszcze raz i dalej nie generuje list i nie wyskakuje żaden błąd
  • Poziom 40  
    Kod jest tak prosty że nie ma prawa nie działać - chyba że o czymś nie wspominasz.
    w załączeniu mój przykład.
    Dopisz jakiekolwiek dane do kolumn Q-U i wciśnij przycisk a lista zostanie wygenerowana.

    Załącz kawałek twego pliku z przykładem danych - to mogą być cyfry (ostatecznie na PW) tu nie ma co nie działąć więc nie wiem gdzie może być błąd.
  • Poziom 23  
    No u Ciebie to działa. W moim przypadku jest jednak trochę inaczej z tworzeniem list. Listy są tworzone (aktualizowane) po zamknięciu pliku. Do tworzenia list nie jest wykorzystywany żaden przycisk. Podałem powyżej cały kod który jest za to odpowiedzialny. Ogólnie to cały plik jest bardzo skomplikowany no i myślę że tylko ten kod jest za to odpowiedzialny.

    Dodano po 1 [minuty]:

    ... cały kod jest zapisany w 'Modules' a nie w arkuszu

    Dodano po 7 [minuty]:

    ... plik jest zabezpieczony hasłami i zawiera dane 500 pracowników więc na forum nie będę tego udostępniał. Najwyżej napiszę na PW. Zależy mi na tym aby utworzyć tą nieszczęsną listę :(
  • Pomocny post
    Poziom 40  
    A jesteś w stanie określić w którym momencie jest uruchamiana procedura "ListaForName" ?

    I jeszcze jedna próba: jak masz włączony twój plik to:
    jeżeli masz excel 2003 wybierz menu Narzędzia - Makro - Makra ... - zaznacz "ListaForName" - kliknij uruchom i sprawdz czy jest lista w kolumnie V arkusza Admin
    jeżeli masz excel 2007 i wyżej to wskaż kartę Widok - Makra - Wyświetl makra - wskaż "ListaForName" - kliknij uruchom i sprawdz czy jest lista w kolumnie V arkusza Admin

    Jeżeli lista się pojawi to chyba jednak mylisz się z tym
    JaroFon napisał:
    ...że tylko ten kod jest za to odpowiedzialny...
  • Poziom 23  
    Ten kod jest uruchamiany w ThisWorkbook przy zamknięciu pliku jak widać w poniższym kodzie:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Zrobiłem jak napisałeś i sprawdziłem makro i pokazuje mi błąd w tej linii:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    a w oknie informacyjnym treść: "Nie można zmienić części scalonej komórki"

    No ale już to naprawiłem :) pierwszy wiersz ma scalone wszystkie komórki od Q do V i dlatego nie wygenerował listę. Po rozłączeniu komórek lista została wygenerowana :) Kolego jesteś wielki. Wielkie dzięki.
  • Pomocny post
    Poziom 40  
    A to akurat przeoczyłem - kurcze.

    W takim wypadku nie rozdzielaj złączonych komórek (bo będzie dziwnie wyglądać) tylko podmień w kodzie "moje":
    .Columns(22).ClearContents
    na "twoje"
    .Range("V3:V65536").ClearContents
  • Poziom 23  
    Podmieniłem kod i działa wyśmienicie. Jeszcze raz dziękuję i idę spać bo do roboty nie wstanę :)
  • Poziom 23  
    Witam ponownie. Zwrócę się jeszcze raz z pomocą w temacie tworzenia list. Mam problem pewnie błahy i bardzo prosty ale już się w tym wszystkim potraciłem. Powyższe kody mniej więcej pokazują jak zrobić to czego teraz nie potrafię ale te kody tworzą masowe listy i nie umiem tych kodów odpowiednio zastosować. W załączniku podałem przykład co chciałbym zrobić. Mam w jednym arkuszu listę pracowników a do niej dodane numery, stanowiska i kierownika. W drugim arkuszu mam tabele. Chcę aby do tabeli wkleić tylko tych pracowników i znaczki którzy będą odpowiadać kryteriom podanym w filtrze. Poniższy plik to tylko przykład. Docelowo kod zostanie zastosowany w innym rozbudowanym pliku, w wielu przeróżnych tabelach. Proszę o pomoc jakim kodem osiągnąć cel a kod postaram się już jakoś przelać do docelowego pliku i tabel.