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.

[Rozwiązano] Excel Vba - Kopiowanie kolumn po nagłówkach z filtrowanych danych

Martini1005 16 Kwi 2018 11:09 357 11
  • #1 16 Kwi 2018 11:09
    Martini1005
    Poziom 3  

    Witam,
    Potrzebuję pomocy odnośnie kopiowania kolumn za pomocą makra.
    W arkuszu nr 1 (Data) mam dane w kolumnach z nagłówkami na które jest założony filtr. Za każdym razem kolejność kolumn, ich liczba może się zmieniać. Także liczba wierszy w każdej kolumnie może się zmieniać.
    W arkuszu nr 2 (Copy) mam same nagłówki kolumn (pokrywają się z nagłówkami w arkuszu numer 1; ale ich liczba i kolejność jest inna niż w arkuszu nr. 1).
    Zadanie polega na tym żeby skopiować z arkusza nr 1 (Data), tylko te kolumny z którymi pokrywają się nagłówki znajdujące się w arkuszu nr 2.
    W załączniku przykładowe dane.
    Szukałem po forach ale nie znalazłem 1 do 1 takiego tematu i mam za słabe umiejętności żeby sobie z tym samodzielnie poradzić.
    Pozdrawiam
    Marcin

    0 11
  • Pomocny post
    #2 17 Kwi 2018 22:06
    lanzul
    Poziom 26  

    Martini1005 napisał:
    Zadanie polega na tym żeby skopiować z arkusza nr 1 (Data), tylko te kolumny z którymi pokrywają się nagłówki znajdujące się w arkuszu nr 2

    Zadanie polega na tym czego nie dopowiedziałeś.
    Czy kopiowane mają być wszystkie, czy tylko wyfiltrowane wiersze, jak np. te według "Kolekcja/Seria", wyfiltrowane po "Casual" ?
    Wyfiltrowanych jest 4 062, a nie wyfiltrowanych 12 198.

    0
  • #3 19 Kwi 2018 11:27
    Martini1005
    Poziom 3  

    Witaj,
    Faktycznie nie dopisałem. Chodzi o kopiowanie wyfiltrowanych wierszy.

    0
  • #4 20 Kwi 2018 19:04
    Prot
    Poziom 29  

    Martini1005 napisał:
    Chodzi o kopiowanie wyfiltrowanych wierszy

    Nie wiem po co filtrować kolumny, w których nie ma istotnych informacji - patrz na zrzut :cry:
    Excel Vba - Kopiowanie kolumn po nagłówkach z filtrowanych danych2018-04...png Download (21.79 kB)
    Założoną funkcjonalność można uzyskać poprzez makro zamieszczone w załączonym pliku. Zmieniłem tam nazwę pierwszego arkusza, a wszystkie wyciągi wyfiltrowanych danych mają nazwę kryterium wyboru. :spoko:
    Import.zip Download (313.4 kB)Punkty: 2 dla użytkownika

    0
  • #5 23 Kwi 2018 17:15
    Martini1005
    Poziom 3  

    Witam,
    Dziękuję za pomoc. Niestety makro wykrzacza mi się na linii: "If Sheets(wybor) Is Nothing Then" i dodaje za każdym razem nowy arkusz.
    Nie do końca też rozumiem do czego służą dodatkowe arkusze z nazwami kolekcji. Czy mają jakieś znaczenie? Generalnie chodziło mi tylko o kopiowanie do już istniejącego arkusza wskazanych kolumn. Jeśli to możliwe proszę jeszcze o wsparcie w rozwiązaniu tego tematu.

    0
  • #6 23 Kwi 2018 21:40
    Prot
    Poziom 29  

    Martini1005 napisał:
    makro wykrzacza mi się na linii: "If Sheets(wybor) Is Nothing Then"

    Faktycznie tak się dzieje :cry: - wymień tą część kodu od If ... do End If na kod:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Martini1005 napisał:
    Nie do końca też rozumiem do czego służą dodatkowe arkusze z nazwami kolekcji

    Służą nadaniu jakiejkolwiek logiki robionym przekształceniom :D
    Zapisywanie wszystkich "wyciągów" (wielokrotnie po 3000 - 4000 rekordów każdy :!: ) w jednym arkuszu moim zdaniem nie ma najmniejszego sensu. :cunning:

    0
  • #7 23 Kwi 2018 22:44
    Martini1005
    Poziom 3  

    Witam,
    Wyjaśniam co robię z taką ilością danych - po skopiowaniu do już istniejącego arkusza są obrabiane przez formuły excela mające na celu powiązanie ich z innymi danymi (praca na słownikach w kilku innych arkuszach+2,3 duże tabele przestawne zawierające pozostałe dane). Zawsze robiłem wklejanie ręczne ale przy kilkunastu tysiącach wierszy jest to mało wygodne.
    Generalnie makro powinno wkleić dane w docelowym arkuszu (Copy) pod już istniejącymi nagłówkami (coś na zasadzie: jeżeli w arkuszu data i copy jest nagłówek kolumny o nazwie "Symbol" to skopiuj z Data i wklej w Copy do kolumny gdzie jest ten sam nagłówek). Odpada sposób jaki jest użyty w obecnym makro z wklejaniem całego zakresu i usuwaniem kolumn bo sypie się cała "obudowa" z formuł (trzeba też pamiętać że kolejność kolumn w arkuszu Data nie jest stała i może się zmieniać)

    0
  • #8 24 Kwi 2018 20:23
    Prot
    Poziom 29  

    Martini1005 napisał:
    Potrzebuję pomocy odnośnie kopiowania kolumn za pomocą makra.

    Wg mojego doświadczenia tworzenie rozbudowanych projektów kalkulacyjnych ze wsparciem makrami VBA - jest bardzo ryzykowne zwłaszcza do zastosowań komercyjnych :cry:
    Nikt oprócz Ciebie nie zna specyfiki przetwarzania Twoich danych i nikt nie jest w stanie stworzyć kodu uniwersalnego. Musisz sam przeanalizować zaproponowany kod, rozpoznać jak działają poszczególne pętle, funkcje, polecenia - na tej podstawie dostosuj sobie makro do swoich potrzeb. :idea:

    Dość dobrze znam Excela, lecz nie wyobrażam sobie obrabiania takiej ilości danych (w stale narastającym arkuszu Copy) przy użyciu zwykłych funkcji :not: zwłaszcza przy zmiennym układzie nagłówków :sm31:

    0
  • #9 24 Kwi 2018 22:27
    Martini1005
    Poziom 3  

    Hmm. Układ nagłówków w arkuszu docelowym jest stały więc nie zaburza odnośników dla formuł. Dane do arkusza copy nie przyrastają w tempie wykładniczym, ponieważ arkusz służy do obrabiania konkretnych rekordów. Dany plik excela odnosi się do określonego zakresu bazy danych i już. Wielkość bazy nie ma tu nic do rzeczy. Dzięki za pomoc i wsparcie przy tym temacie, niestety zaproponowane makro z założenia nie działa wg. potrzebnych mi warunków i będzie ciężko je dostosować.

    0
  • Pomocny post
    #10 26 Kwi 2018 00:17
    lanzul
    Poziom 26  

    Martini1005 napisał:
    skopiować z arkusza nr 1 (Data), tylko te kolumny z którymi pokrywają się nagłówki znajdujące się w arkuszu nr 2

    Sprawdź:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    0
  • #11 26 Kwi 2018 23:47
    Martini1005
    Poziom 3  

    Działa genialnie! Wielkie, wielkie dzięki :)

    0
  • #12 26 Kwi 2018 23:49
    Martini1005
    Poziom 3  

    Działa genialnie! Wielkie, wielkie dzięki :)

    Dodano po 2 [minuty]:

    Temat do zamknięcia. Użytkownik lanzul zaproponował właściwe, rewelacyjnie działające makro.

    0