Elektroda.pl
Elektroda.pl
X

Search our partners

Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] [VBA] Podział danych w arkuszu według dwóch kolumn i eksport do osobnych plików

Taczer7513 05 Aug 2019 11:51 636 12
  • #1
    Taczer7513
    Level 6  
    Witam
    Mam skoroszyt z pięcioma arkuszami, w których opracowuję dane. (w załączeniu). W ostatnim arkuszu "dane_end" mam wynik opracowania. Arkusz ten za pomocą makra eksportuję do nowego pliku. Jest "ok" jeżeli dane dotyczą jednego dnia i jednej jednostki.
    Opracowane dane są zawarte w kolumnach od A do K. W kolumnie "C" ma datę, a w kolumnie "G" jednostkę. Dodatkowo w kolumnach L do O i kolumnie AB mam dodatkowe dane, które potrzebne są w plikach docelowych.
    Czy można zmodyfikować poniższe makro, lub wykorzystać jakieś inne, które podzieliłoby dane z arkusza "dane_end" i wyeksportowało tyle plików, ile jest unikatowych wartości w kolumnach "C" i "G"? ( w moim przykładzie mam dwie daty i dwie jednostki, czyli powinny powstać 4 osobne pliki).

    Code: vbnet
    Log in, to see the code

    Zeszyt1.7z Download (26.02 kB)
  • #2
    PRL
    Level 40  
    Quote:
    i wyeksportowało tyle plików, ile jest unikatowych wartości w kolumnach "C" i "G"


    Proponuję użyć filtra zaawansowanego i w wolnej kolumnie umieścić wartości unikatowe, a potem na ich podstawie filtrować 'dane_end' i zapisywać w nowym pliku.

    Tutaj podobny temat.
  • Helpful post
    #3
    lanzul
    Level 30  
    Taczer7513 wrote:
    Czy można zmodyfikować poniższe makro

    Pewnie można ... jak się komuś będzie "chciało chcieć" ... : ) ... ale wpierw parę uwag dla przyszłych twoich "modyfikacji":

    1. xlOpenXMLWorkbook - podawałbym kody liczbowe (w tym przypadku jest to 51) zamiast nazwy stałych, będzie bezpieczniej jeśli plik będzie otwierany w różnych wersjach excela:
    Code: vbscript
    Log in, to see the code

    2. Function CopyDataRangeP
    W tym kształcie to nie jest funkcja tylko zwykła podprocedura "wbita" w ciałko funkcji.
    Istotą funkcji jest to, że wykonuje działania "bierne", a nie "aktywne", a tu jest zaznaczanie, kopiowanie, wklejanie, ukrywanie kolumn ... : (

    A.
    Code: vbscript
    Log in, to see the code

    Dlaczego 'On Error' jest w tym miejscu ? Liczysz się z wystąpieniem błędów już w sekcji deklaracyjnej zmiennych ... : ) ?

    B.
    Code: vbscript
    Log in, to see the code

    Dla 'Wsh' masz już sekcję powyżej tej, po co zatem w tym miejscu to 'Wsh' ?
    'DoEvents' - czy danych jest aż tak dużo, że trzeba dać odetchnąć systemowi, żeby sobie to "spokojnie przetrawił" ?

    C.
    Code: vbscript
    Log in, to see the code

    Dlaczego odniesienia do obiektów typu 'Range/Columns' dla arkusza zagnieżdżasz w odniesieniach do pojedynczej komórki ?
    Nie stosujesz w ogóle "kropencji" w konstrukcjach 'With ... End With'.
    Kiedyś brak tych "kropuń" odbije ci się czkawką, jak arkusz, na którym będziesz chciał wykonywać operacje nie będzie arkuszem bieżącym.
    Powinno być raczej coś takiego:
    Code: vbscript
    Log in, to see the code


    D. I jeszcze tu:
    Code: vbscript
    Log in, to see the code
  • #4
    Taczer7513
    Level 6  
    PRL wrote:
    Proponuję użyć filtra zaawansowanego i w wolnej kolumnie umieścić wartości unikatowe, a potem na ich podstawie filtrować 'dane_end' i zapisywać w nowym pliku.
    Tutaj podobny temat.


    PRL dzięki za podpowiedź i wskazanie tematu. Trafiłem już na niego wcześniej i próbowałem wykorzystać Twój kod zawarty w pliku "Typy". Ale "cienki Bolek" jestem w VBA i nie potrafię sobie z tym poradzić. Kod zawarty w tym pliku fajnie działa dla kryterium zawartym w jednej kolumnie, a ja chcę podzielić dane na pliki na podstawie danych z dwóch kolumn.
  • #5
    PRL
    Level 40  
    Quote:
    ja chcę podzielić dane na pliki na podstawie danych z dwóch kolumn


    Na jakiej zasadzie?
  • #6
    Taczer7513
    Level 6  
    PRL wrote:
    Quote:
    ja chcę podzielić dane na pliki na podstawie danych z dwóch kolumn


    Na jakiej zasadzie?


    Na podstawie takich par. Według Twojej wcześniejszej podpowiedzi do osobnych kolumn przeniosłem unikatowe wartości z kolumn "C" i "G" z mojego przykładowego pliku.
    [VBA] Podział danych w arkuszu według dwóch kolumn i eksport do osobnych plików
  • Helpful post
    #9
    PRL
    Level 40  
    Pętla po Q i R, ustawianie filtra na C i G, kopiowanie do nowego pliku.
    Nagraj makro i zmodyfikuj.
  • #10
    Taczer7513
    Level 6  
    lanzul wrote:
    Pewnie można ... jak się komuś będzie "chciało chcieć" ... : ) ... ale wpierw parę uwag dla przyszłych twoich "modyfikacji"

    Sorry lanzul, ale nie odpowiem na zadane przez Ciebie pytania, bo nie ja jestem autorem tego kodu (no może poza wstawką opisaną w punkcie C). Ale przyjmuję wszelkie uwagi od mądrych ludzi, bo chcę się czegoś nowego w temacie VBA nauczyć :)

    PRL wrote:
    Pętla po Q i R, ustawianie filtra na C i G, kopiowanie do nowego pliku.
    Nagraj makro i zmodyfikuj.

    PRL czy oprócz "wędki" możesz zapodać jakąś małą "płotkę", np. wspomnianą pętlę po Q i R?
  • #12
    Taczer7513
    Level 6  
    PRL wrote:
    Płotka w puszcze.;)

    Dzięki wielkie PRL. To nie płotka, tylko raczej wszystkie ryby z całego dnia wędkowania 8-O . Kod działa super. :D
  • #13
    Taczer7513
    Level 6  
    Problem rozwiązany przez kolegę PRL. Kod działa zgodnie z założeniami. Chwała mu za to. :D
    Jeszcze raz wielkie dzięki dla wszystkich, którzy udzielili mi wsparcia i pomocy przy rozwiązaniu tego problemu.