Elektroda.pl
Elektroda.pl
X
SterControl
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA - dzielenie wartości z dwóch komórek/wynik w trzeciej

ag.ag.ta 27 Lut 2018 16:02 462 13
  • #1 27 Lut 2018 16:02
    ag.ag.ta
    Poziom 8  

    Cześć,

    piszę swoje pierwsze makro i od wczoraj głowię się z pewnym tematem.

    Otóż chcę dać instrukcję, aby w komórce G2 (lub innej, oddalonej o jedną kolumnę od końca danych) pojawił się wynik działania =C2/B2-1. Plik zawsze zaczyna się w A1, a dane zawsze zaczynają się od B2, jednak liczba kolumn i wierszy jest różna (zależnie od zaciągniętego pliku), dlatego nie mogę odwoływać się do konkretnych komórek.

    VBA - dzielenie wartości z dwóch komórek/wynik w trzeciej

    Aktualnie zatrzymałam się na etapie, kiedy w komórce G2 rzeczywiście pojawia się wynik takiego działania, jednak przekopiowywany jest on do co drugiej komórki w całym wierszu, po czym program się wysypuje. Odpowiedzialna za takie zachowanie jest pewnie instrukcja For i = 2, jednak zupełnie nie umiem jej poprawić, pewnie dlatego, że już drugi dzień siedzę nad tym fragmentem.

    Czy mogłabym prosić o wskazówki ws. tej części kodu?

    Poniżej fragment kodu, w załączeniu pełne makro.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Czy możecie polecić również strony/książki do nauki VBA? Pętli, zmiennych itp. Serdecznie dziękuję!

    0 13
  • SterControl
  • Pomocny post
    #2 27 Lut 2018 17:47
    Andie
    Poziom 20  

    Coś tam za dużo kombinacji alpejskich w tym kodzie ;-)
    Jeśli dobrze zrozumiałem, to powinno wystarczyć coś takiego:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    andie

    0
  • #3 27 Lut 2018 21:47
    ag.ag.ta
    Poziom 8  

    Kombinacji dużo, bo to moje pierwsze w życiu makro, a nauczyciela brak ;)

    Oczywiście dziękuję za propozycję rozwiązania. Rozjaśniła mi co nieco, jednak makro wywaliło się na pustej komórce, które niestety mogą się zdarzać:

    VBA - dzielenie wartości z dwóch komórek/wynik w trzeciej
    Jedyna kolumna, w której na pewno będą dane to "A" i sprawdzenie powinno wykonywać się do ostatniej niepustej komórki w kolumnie "A".
    Celowałabym tutaj w jakiegoś "IFa"?

    Generalnie wyjściowo chciałabym uzyskać coś takiego:
    VBA - dzielenie wartości z dwóch komórek/wynik w trzeciej
    O ile formatowanie komórki jako procent i autofit wiem jak wykonać, o tyle z wypełnieniem tych kolumn gorzej..

    Dane wejściowe to dane tygodniowe, więc nawet i sprawdzenie roczne, tj. 52 tygodni może się zdarzyć.

    Udało mi się napisać coś takiego:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Powyższy kod generuje niestety "0: w kolumnie "C" pod tabelą. Pozostaje też pytanie, jak wypełnić każdą następną kolumnę?

    VBA - dzielenie wartości z dwóch komórek/wynik w trzeciej

    0
  • SterControl
  • #4 27 Lut 2018 22:00
    Andie
    Poziom 20  

    Załącz kawałek tego arkusza z danymi (najlepiej niestandardowymi - jakie mogą wystąpić), to będzie łatwiej.
    Czy w jednym "zestawie danych" będzie zawsze tyle samo kolumn z danymi, czy może być tak, że w wierszu 2 są 3 kolumny z danymi, a w wierszu 3 - 4 kolumny?

    0
  • #5 27 Lut 2018 22:26
    ag.ag.ta
    Poziom 8  

    Arkusz z danymi, czyli plik wejściowy csv? Załączyłam taki, który uwzględnia wszystkie sytuacje.

    Aktualnie kod wygląda następująco:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Zauważyłam również, że dochodzi sytuacja, kiedy nie ma danych dla ostatniego tygodnia - wtedy cały wiersz z oczywistych powodów przesuwa się w lewo...

    Odnośnie Twojego pytania: nagłówek dla konkretnych danych wejściowych zawsze będzie taki sami, natomiast niektóre kody w niektóre tygodnie mogą nie generować wartości.

    0
  • Pomocny post
    #6 27 Lut 2018 23:14
    Andie
    Poziom 20  

    Przetestuj teraz

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #7 28 Lut 2018 09:48
    ag.ag.ta
    Poziom 8  

    mega! jest super, dziękuję. chyba nie jestem jeszcze na etapie, żebym sama to rozkminiła ;)

    mam tylko jeszcze pytanie o wypełnienie pustych pól "0". Dodałam linię w ostatnim "IFie":

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    dopisuje ona jednak te zera długo pod tabelą. Jak to zmienić?

    Dodano po 41 [minuty]:

    Niestety - doszedł nowy tydzień i makro się rozjechało:

    VBA - dzielenie wartości z dwóch komórek/wynik w trzeciej

    0
  • Pomocny post
    #8 28 Lut 2018 09:56
    Andie
    Poziom 20  

    Musisz ponowić instrukcję:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    przed drugą pętlą, ponieważ ten wiersz jest obliczany wcześniej przed utworzeniem tabeli przestawnej i jest już później nieaktualny.

    Jeśli to faktycznie Twoje pierwsze makro, to całkiem nieźle Ci poszło.

    Pytałaś o książki z VBA, więc polecam osobiście lekturę:
    Link
    Polecam także (darmowy) kurs internetowy: Link

    Życzę wytrwałości w nauce :)

    andie

    0
  • #9 28 Lut 2018 12:11
    ag.ag.ta
    Poziom 8  

    Powtórzyłam i rzeczywiście jest ok.

    Niestety pozostał problem rozjechania. Wydaje mi się, że generowany jest przez zastosowanie "3" i "4" w poniższym "IFie":

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Tak, jak wspominałam - liczba kolumn z pliku wejściowego może być różna..

    Pokombinowałam z takim kodem, ale teraz wszędzie są 0 :D
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Czuję, z brakuje mi podstaw, więc na pewno skorzystam z Twoich linków, andie! Dziękuję.

    0
  • #10 28 Lut 2018 12:18
    Andie
    Poziom 20  

    Prześlij plik z danymi, przy których się rozjeżdża, bo nie wiem w czym problem.

    0
  • #11 28 Lut 2018 12:30
    ag.ag.ta
    Poziom 8  

    W poście z 09:48 zrobiłam screen - problem jest w momencie większej liczby kolumn z pivotki. Generalnie w każdym tygodniu dojdzie nowa kolumna, bo to dane tygodniowe.

    0
  • #12 28 Lut 2018 12:40
    clubs
    Poziom 29  

    Cytat:
    Tak, jak wspominałam - liczba kolumn z pliku wejściowego może być różna.

    Witam
    I tu jest u Ciebie problem trochę źle do tego podchodzisz

    Tu już zakładasz że coś będzie puste w kol 11
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    dalej tu zakładasz że twoja tabela będzie zawsze do Q
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Najpierw musisz określić jakie dane tylko potrzebujesz z tego pliku csv i je wyciągnąć a później reszta operacji.

    0
  • #13 28 Lut 2018 12:46
    ag.ag.ta
    Poziom 8  

    Pierwsze założenie jest dobre, bo rzeczywiście w kolumnie 11 pliku csv czasem mogą wystąpić blanki i jeżeli tak się wydarzy - usuwam cały taki wiersz.

    Liczba kolumn tabeli przestawnej też jest stała, ponieważ raport co tydzień dostaje taki sam - różna może być tylko liczba wierszy. Potem robię z tego tabelę przestawną i tutaj zaczyna się zabawa ;)

    0
  • #14 28 Lut 2018 15:09
    Andie
    Poziom 20  

    ag.ag.ta napisał:
    ponieważ raport co tydzień dostaje taki sam - różna może być tylko liczba wierszy

    dlatego prosiłem o plik z danymi z inną ilością wierszy (przekształcanych później na kolumny), żeby nie testować w próżni..

    no dobra... podmień tą pętlę na poniższą i sprawdź.

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0