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.

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

05 Sie 2019 11:51 183 12
  • Poziom 3  
    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).

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Zeszyt1.7z Download (26.02 kB)
  • Poziom 35  
    Cytat:
    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.
  • Pomocny post
    Poziom 28  
    Taczer7513 napisał:
    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:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    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.
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

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

    B.
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    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.
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    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:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    D. I jeszcze tu:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Poziom 3  
    PRL napisał:
    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.
  • Poziom 35  
    Cytat:
    ja chcę podzielić dane na pliki na podstawie danych z dwóch kolumn


    Na jakiej zasadzie?
  • Poziom 3  
    PRL napisał:
    Cytat:
    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
  • Pomocny post
    Poziom 35  
    Pętla po Q i R, ustawianie filtra na C i G, kopiowanie do nowego pliku.
    Nagraj makro i zmodyfikuj.
  • Poziom 3  
    lanzul napisał:
    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 napisał:
    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?
  • Poziom 3  
    PRL napisał:
    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
  • Poziom 3  
    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.