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.

VBA i uzupełnianie wpisów na podstawie wartości komórek

daro_p 27 Kwi 2017 21:28 705 7
  • #1 27 Kwi 2017 21:28
    daro_p
    Poziom 17  

    Witam.
    Pracując nad nowym projektem napotkałem nietypowy problem. Mam plik ze sporą ilością danych. Dane ułożone są w bazę dotyczącą określonych transakcji (kwity) - kilka tysięcy linii. Każdy kwit transakcji ma swój numer (kolumna "NR DOKUMENTU"). Do danego dokumentu przypisana jest pewna zmienna liczba linii (analogicznie jak np. paragon fiskalny i jego numer z wyszczególnionymi produktami). Przy pewnych liniach na dokumencie przypisane mogą być uwagi. Teraz opis problemu - chcąc analizować dane w dużej skali potrzebę uzupełnić brakujące uwagi ( puste komórki ) uwagami, które znalazły się w którejś linii danego dokumentu ( identyfikowanego po nr dokumentu) - powielenie ich do wszystkich brakujących uwag w linii nr dokumentu. W załączniku przykład, gdzie czarną czcionką wpisałem przykładowe dane, które istnieją - a jasnoszarą takie, które powinny być dopisane przez kod. Dodatkowym utrudnieniem jest fakt, że trochę przypadkowa jest linia, w której znajdzie się uwaga (może to być pierwsza od góry, lub środkowa) w odniesieniu do nr dokumentu. Może być też sytuacja, gdzie nie ma żadnych uwag - wtedy nic nie jest kopiowane. Dla większej czytelności obrysowałem czarnymi liniami podział dokumentów na ich składowe. Czy takie zadanie jest wykonalne w VBA? W razie niejasności doprecyzuję szczegóły :-)

    0 7
  • #2 28 Kwi 2017 06:22
    lanzul
    Poziom 26  

    daro_p napisał:
    ...
    1. plik ze sporą ilością danych. Dane ułożone są w bazę dotyczącą określonych transakcji (kwity) - kilka tysięcy linii.

    2. Każdy kwit transakcji ma swój numer (kolumna "NR DOKUMENTU").

    3. Do danego dokumentu przypisana jest pewna zmienna liczba linii (analogicznie jak np. paragon fiskalny i jego numer z wyszczególnionymi produktami).

    4. Przy pewnych liniach na dokumencie przypisane mogą być uwagi.

    Teraz opis problemu -

    5. ... potrzebę uzupełnić brakujące uwagi ( puste komórki ) uwagami, które znalazły się w którejś linii danego dokumentu ( identyfikowanego po nr dokumentu) - powielenie ich do wszystkich brakujących uwag w linii nr dokumentu.

    6. ... czarną czcionką ... przykładowe dane, które istnieją - a jasnoszarą takie, które powinny być dopisane przez kod.

    7. Dodatkowym utrudnieniem jest fakt, że trochę przypadkowa jest linia, w której znajdzie się uwaga (może to być pierwsza od góry, lub środkowa) w odniesieniu do nr dokumentu.

    8. Może być też sytuacja, gdzie nie ma żadnych uwag - wtedy nic nie jest kopiowane.

    9. ... czarnymi liniami podział dokumentów na ich składowe.
    ...


    Ad 5.
    Przy założeniu, że dany dokument nie może mieć w liniach swoich powtórzeń różnych uwag, jeśli jest ich więcej jak jedna - to jest to do zrobienia paroma pętlami i może dwoma ... trzema konstrukcjami warunkowymi.
    Jeśli jest inaczej, to na jakich zasadach ten sam dokument, mający dwie ... i więcej różnych uwag, miałby być nimi 'powielany' tam gdzie ich nie ma, w oparciu o co (?) ... długość tekstu, położenie, 'znaki szczególne' w uwagach (?).
    Piszę tak, gdyż opisane w pliku uwagi sugerują co innego niż piszący 'zapotrzebowanie' (Ad 6.) ... :)

    Ad 7.
    To nie ma znaczenia ... może bowiem działać np: na zasadzie takiej, że znajduje pierwszy pusty wiersz, sprawdza, jaki nr dokumentu mu odpowiada, a następnie odnajduje taki sam dokument, tylko z uwagami, po czym jeszcze raz przemiata kolumnę w poszukiwaniu wystąpień tegoż dokumentu z "pustymi uwagami", które trzeba "uzupełnić" tą wczesniej znalezioną - trzy przejścia poszukujące + ileś tam zapętlających

    Ad 8.
    Dla ułatwienia, żeby nie mnożyć "if-ów" można kopiować "puste uwagi" w miejsca "pustych uwag", co najwyżej znajdą się tam jakieś odstępy, albo "znaki ukryte dla oczu" ... :)

    0
  • #3 28 Kwi 2017 06:28
    JRV
    Specjalista - VBA, Excel

    1. Czy zawsze te same numery dokumentów są najbliższych jeden po drugim?
    2. Np. dla Nr. dokum. 548789 uwagi od 'uwaga 10' do 'uwaga 14'. Powinny być takie same('uwaga 10' )?

    0
  • Pomocny post
    #4 28 Kwi 2017 06:58
    lanzul
    Poziom 26  

    Wygląda to trochę jak kaszanka z cebulką ... ale kopiuje ... :) ...
    przykład..2.zip Download (15.99 kB)

    Uwaga: żeby puste uwagi nie wypełniały się fikcyjnymi uwagami trzeba zmienić:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    na:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Może kolega JRV zerknie, czy to ma ręce i nogi.

    Miałem też pomysł, na coś bardziej "obiektowego", ale nie wyszło ... :) :

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #5 28 Kwi 2017 07:11
    JRV
    Specjalista - VBA, Excel

    Autor nie odpowiedział na moje pytania, ale jeśli mam rację, to tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #6 28 Kwi 2017 11:42
    lanzul
    Poziom 26  

    JRV napisał:
    ...ale jeśli mam rację, to tak:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Krótko, zwięźle i szybko :D .... da się to odczuć przy tych paru tysiącach wierszy, o których daro_p pisze ... sądzę że autor powinien być zadowolony z rozwiązania kolegi ... :D ... osobiście, bardzo 'mnie sie to podobuje' ... :D.
    Autor musi tylko zrobić rachunek sumienia, czy dokumenty będą zawsze tak ładnie posortowane i poukładane swoimi numerami jeden pod drugim, ale tutaj zawsze przecież może sobie wstępnie posortować ... żaden kłopot ... :)

    0
  • #7 28 Kwi 2017 18:48
    daro_p
    Poziom 17  

    Witam dziękuję za zainteresowanie. Do kolegi JRV - tak - numery są przy sobie ( tak są wyciągane z bazy danych zapytaniem SQL), pytanie 2 - tak, powinny być skopiowane. Chodź o to, ze raport działający na pliku, analizuje uwagi i bierze pod uwagę tylko linie, z wpisanymi wartościami ( pomija puste). W tym momencie dla danego dokumentu analizowana jest tylko linia z uwagą, a powinien być analizowany w calosci ( wszystko jego linie). Komentarze są o tyle ważne, ze działa juz moduł analizujący treść uwag, i na tej podstawie kwalifikuje dane linie dokumentu do odpowiednich kategorii.

    Dodano po 7 [godziny] 1 [minuty]:

    Jestem po testach i działa super. Jedyny problem jaki napotkałem to wyświetlanie komunikatu błędu, kiedy kod natrafił na komentarz zaczynający się od "=". Chyba traktował to jak formułę i wyświetlał " Application-definder or object - definder error". Poradziłem sobie z tym osuwając profilaktycznie wszystkie znaki równości w tekście. Dzięki !!!!!!

    0
  • #8 28 Kwi 2017 19:53
    JRV
    Specjalista - VBA, Excel

    daro_p napisał:
    komentarz zaczynający się od "=".

    Sprobuj
    Dim r&, rs&, u$
    Wtedy komentarz ma byc jako text(nie testowano)

    0