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.

Excel - Makro, przejście do komórki niżej

Vis Maior 15 Mar 2013 12:03 3285 1
  • #1 15 Mar 2013 12:03
    Vis Maior
    Poziom 9  

    Cześć,
    Tworzę w Excelu proste Makro (których znawcą nie jestem).

    Mam listę zamówień na daną ilość oraz wartość różnych produktów.
    Lista zawiera przykładowo 155 pozycji, jednak towarów jest tylko 5. Do zsumowania łącznych ilości i wartości zamówień poszczególnych towarów używam sumy częściowej, co widać na poniższym obrazku.
    Excel - Makro, przejście do komórki niżej

    Następnie chciałbym zsumować:
    1. Łączną ilość towarów, dla produktów, których suma wynosi mniej lub równe 500 000. Czyli w komórce C166 mieć wartość komórki C40.
    2. W komórce D166, zsumowane wartości, dla ilości mniejszych lub równych 500 000, czyli wartość komórki D40.
    3. W komórce C174 to samo co w punkcie 1 ale dla ilości powyżej 500 000. Czyli C17+C86+C106+C157.
    4. W komórce D174 to samo co w punkcie 2 ale również dla ilości powyżej 500 000 czyli D17+D86+D106+D157.

    Rozwiązanie, które znam opiera się na funkcjach logicznych, przy sporadycznym używaniu jest ok, zwłaszcza na tych samych listach, jednak przy zupełnie różnych ilościach i listach jest już to dla mnie, a w zasadzie dla znajomej, której w rozwiązaniu tego wyzwania pomagam niefunkcjonalne.

    Pomysł na makro jest taki by makro analizowało zaznaczone, widoczne komórki. Najpierw tworzymy sumę częściową, która jest jej potrzebna, następnie zaznaczamy zakres komórek i włączamy makro.
    Makro sprawdza kolejno zaznaczone, widoczne komórki, jeżeli wartość jest mniejsza bądź równa niż 500 000 sumuje je i wynik wyrzuca na dole.
    Dla przykładu 2 sprawdza czy ilość jest mniejsza bądź równa, jeżeli tak to przechodzi do komórki po prawej stronie, bierze wartość, przechodzi do kolejnej komórki z ilością, itd.

    Czy pomoże ktoś swoją wiedzą?

    0 1
  • #2 16 Mar 2013 12:22
    Maciej Gonet
    Poziom 32  

    Dzień dobry,
    Moim zdaniem lepiej to zrobić funkcją użytkownika niż makro. Szkoda, że nie dał Pan załącznika z plikiem, bo nie bardzo wiadomo, co tam jest, czy dane są tylko stałymi, czy są też formuły, czy są tylko liczby, czy również teksty. Nie wiem też czy potrzebne jest ukrywanie wierszy, jest to dodatkowa czynność, czy potrzebna?
    Kluczową sprawą jest określenie, które komórki z zakresu mają być brane pod uwagę przy sumowaniu. Wybrał Pan jako kryterium widoczność (wiersz nie jest ukryty). Zakładam, że wszystkie komórki z interesującego zakresu zawierają wartości liczbowe. Ale jeśli wszystkie pozostałe (ukryte) komórki zakresu zawierają stałe, a tylko komórki widoczne zawierają formuły, to kryterium może być obecność formuły i nie trzeba będzie filtrować (ukrywać) komórek. Jeżeli w zakresie zdarzają się inne formuły, to można doprecyzować jakich formuł szukamy itd. Jest dużo niejasności, bo jest Pan trochę za bardzo tajemniczy.
    W każdym razie w module Visual Basica należy zdefiniować 2 funkcje (lub jedną z dodatkowym parametrem, określającym czy sumujemy wartości większe czy nie większe od limitu), na przykład tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Pierwsza funkcja zwraca sumę wartości nie większych, a druga większych od limitu.
    Wywołuje się ją w arkuszu na przykład tak: =SumaM(A2:A50;500000)
    Pierwszy parametr jest zakresem do analizy.

    Gdyby było tak, że tylko komórki do analizy zawierają formuły, to można zmienić wiersze:
    If Not kom.EntireRow.Hidden Then
    na:
    If kom.HasFormula Then
    i wtedy nie trzeba będzie nic ukrywać.
    Powodzenia

    0