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]- przetworzenie danych w celu stworzenia tab. przestawnej

nygasaki 26 Mar 2014 10:00 996 4
  • #1 26 Mar 2014 10:00
    nygasaki
    Poziom 2  

    Witam wszystkich,
    Chciałem Was prosić o pomoc w napisaniu makra w VBA, które będzie w stanie uporządkować dane z arkusza 1 do arkusza 2 wg wzorca.

    Głównym problemem jest połączenie tych warunków. Ponieważ są 2 wymiary (np. funkcja cells(1 wymiar, 2 wymiar) i jeśli je uzależniam od siebie to wychodzą mi jedynie warunki na 2 zmienne (Cecha1, Cecha2), nie mogę wtedy jednak w żaden sposób zadziałać na dane. natomiast jeśli zadziałam tylko na cechę 1 lub cechę 2 to wszystko się "rozjeżdża".

    Parametry dodatkowe:

    dane -> zawsze stała ilość (w tym przypadku 5 (1-5)), nie wszystkie muszą jednak zawierać wartości

    cecha 1-> np. w styczniu może być 1-10 wartości dla cechy 1, w lutym 1-8, 10-12, 14-20 w marcu 1-3, 6-7, 9-12, 25-50, w kwietniu 1.

    kolejnym problemem jest brak stałej ilości dla cechy 2 (nie musi być tylko styczen, luty, marzec -> może być dowolny miesiąc i dowolna ilość miesięcy)



    Dla jasności posiadam Ms-Excela 2010.



    Edycja:
    Dorzucam wam plik, który był moją pierwszą i dość nieudolną próbą stworzenia dobrego makra do tego problemu. Może rozjaśni co po niektórym mój problem
    (ponieważ jak można zauważyć opisy w języku polskim problemów w moim wydaniu nie należą do najłatwiejszych).

    0 4
  • #2 26 Mar 2014 11:48
    adamas_nt
    Moderator Programowanie

    nygasaki napisał:
    ponieważ jak można zauważyć opisy w języku polskim problemów w moim wydaniu nie należą do najłatwiejszych
    Trudno się nie zgodzić :)
    Plik dodatek.xls pobiera dane z innego (Kopia RAPORT WYNAGRODZEŃ SF 2013-2014 (2).xlsm), więc poza błędami zawiera niewiele.

    Zapytam inaczej: Czy chodzi o to, żeby w pliku probka.xls, dane z arkusza 'dane' skopiować do arkusza 'wynik', "układając" je w przedstawiony sposób?

    0
  • #3 26 Mar 2014 11:53
    nygasaki
    Poziom 2  

    Dokładnie tak, o to chodzi dokładnie.

    0
  • Pomocny post
    #4 26 Mar 2014 19:22
    adamas_nt
    Moderator Programowanie

    Żadnych postępów?
    Po mojemu trzeba zagnieździć kilka różnych pętli. Od zewnątrz:
    1. For-Next 1 To MAX z kolumny A
    2. Do-Loop do 1-szej pustej w pierwszym wierszu od kol. C
    3. Do-Loop do 1-szej pustej w kol. A od wiersza Nr 2

    W trzeciej pętli sprawdzamy, czy wartość komórki z kol. A równa licznikowi pętli For. Jeśli tak, kopiujemy. Potrzebny będzie jeszcze licznik dla wiersza wynikowego i drugi dla kolumny wynikowej.
    Gdzie który resetować? Trzeba sprawdzić "w praniu"... I tu pewnie będzie "trochę dłubaniny" ;)

    Edit: 21:11

    Coś chyba wychodzi. Wklej do modułu i uruchom. Dla porównania wyniki wstawiane są do 'Arkusz3'

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Edit: 21:34
    Ciut poprawiłem

    0
  • #5 27 Mar 2014 07:52
    nygasaki
    Poziom 2  

    Dziękuję, napisany przez Pana kod działa bez zarzutów. Jestem bardzo wdzięczny.


    Edit:
    Mam tylko jeden mały problem... ponieważ wartości w miejscu cecha jeden nie są liniowe, i nie koniecznie rozmieszczone rosnąco... czyli funkcja max nie dziala, a także nie wiem jeszcze jak rozwiązać tą pierwszą kwestię, ponieważ przez to, że moje dane nie są 1,2,3,4,5... itp. nie uzupełnia danych w pozostałych kolumnach.

    0