Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

vba - poszukiwanie maksymalnej wartości sumy

PrzemekCz 12 Nov 2014 12:19 831 10
  • #1
    PrzemekCz
    Level 7  
    Witam,
    Potrzebuję pomocy przy napisaniu makra, które poda dzień w którym zostało wydane najwięcej pieniędzy.

    Pod spodem przesyłam część tabelki, która mnie interesuje:

    data kwota
    1995-02-13 11,00
    1995-02-08 12,40
    1995-02-02 12,00
    1995-02-05 34,00
    1995-02-22 21,00
    1995-02-03 2,50
    1995-02-09 1,20
    1995-02-20 20,00
    1995-02-02 37,00
    1995-02-23 13,00
    1995-02-15 9,75
    1995-02-07 78,00
    1995-02-15 12,30
    1995-02-04 20,00
    1995-02-05 24,50
    1995-02-04 39,50
    1995-02-08 3,60


    Z góry dziękuje za pomoc.
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • #2
    dt1
    Admin of Computers group
    Witam.
    Do tego nie jest potrzebne makro, tylko niezbyt skomplikowana formuła (funkcja). W takim układzie tabeli potrzebuje Kolega skorzystać z trzech funkcji: MAX, PODAJ.POZYCJĘ, INDEKS - po ich odpowiednim złożeniu uzyska Kolega (w przypadku tego konkretnego przykładu) datę 1995-02-07, która odpowiada najwyższej liczbie 78.
  • #3
    PrzemekCz
    Level 7  
    ja wiem że można bez napisania makra ro zrobić, ale na zaliczeni muszę napisać makro, dlatego takie jest moje pytanie :)
  • #5
    marek003
    Level 40  
    Ale w czym mamy ci pomóc?
    Czego nie rozumiesz?
    Masz napisać makro więc pisz.
    Jeżeli masz zaliczenie to na pewno miałeś też przekazywaną wiedzę jak coś podobnego robić.
    Postępuj tak jak masz w notatkach i jeżeli coś ci nie wyjdzie zapytaj o konkret pokazując co już osiągnąłeś.


    :arrow: dt1 Kolega zauważy ze autorowi chodzi o sumę z dnia, więc może się zdarzyć że suma z danego dnia przewyższy "pojedyncze" maksimum więc jeszcze trzeba by było wykorzystać suma.jeżeli()
    Ale to tylko tak na marginesie.

    dodane po chwili
    ----------------------------
    wyprzedziłeś mnie :)
  • #6
    PrzemekCz
    Level 7  
    napisałem funkcję, która sumuje wartości dla podanej daty i to działa:

    Code: vb
    Log in, to see the code



    następnie chciałem/chcę napisać makro, które dla każdego dnia pobierze wartość z mojej funkcji i zdefiniuje ją jako max:


    Code: vb
    Log in, to see the code

    I tu pojawia się problem. Wydaje mi się, że łatwy ale nie mam pomysłu jak do obejść, a muszę przyznać nie lubię programować a muszę się tego nauczyć.
  • Helpful post
    #7
    marek003
    Level 40  
    Próbuje zrozumieć co chcesz osiągnąć i nie do końca wiem.


    PrzemekCz wrote:
    Code: vb
    Log in, to see the code
  • #8
    PrzemekCz
    Level 7  
    założyłem sobie tak że wykorzystując funkcję "suma_wydatki" oblicze sobie wpłaty dla "podanego dnia". Ten "podany dzień" byłby następnie wykorzystywany w samym makro, na zasadzie takiej że biorę po kolei dni tygodnia powiedzmy od i=1 do n i sumuję dla nich wartości, a następnie wyznaczam max. Może moje założenie jest błędne, jak jest jakaś inna możliwość to będę wdzięczny na naprowadzenie mnie na rozwiązanie :)
  • Helpful post
    #10
    marek003
    Level 40  
    Do autora:
    Jak zauważyłeś twoja funkcja działa - więc już połowa sukcesu.
    (na marginesie zmienna "dzień" to nie to samo co zmienna "dzien"więc akurat ten kod który przedstawiłeś nie powinien działać ale ...)


    Przechodzimy do koncepcji i twojej procedury głównej.
    Bardzo dobrze pomyślałeś (dobra w tym przypadku koncepcja) że "biorę po kolei dni tygodnia powiedzmy od i=1 do n i sumuję dla nich wartości, a następnie wyznaczam max. " tylko nie do końca przełożyłeś to na kod.

    Zacznijmy od początku.
    Masz funkcje która wylicza kwotę na dany dzień.
    Trzeba więc teraz zrobić pętlę by wyliczyć tą kwotę dla każdego dnia.
    Twoje podejście jest wg. mnie ok tylko że chyba się troszeczkę pogubiłeś (lub -za co jeżeli nie to przepraszam - nie ty jesteś twórcą tej funkcji którą przedstawiłeś).

    Po pierwsze musisz sprawdzić wszystkie daty z zakresu wiec pętla nie powinna być na zmiennej "kwota" tylko na "daty". Prawdę mówiąc nic to nie zmienia, jednak jest bardziej czytelne. Pętla więc powinna być
    Code: vb
    Log in, to see the code

    Tu następuje pierwsze pytanie skąd procedura ma posiąść wiedze na temat zmiennej "daty". Przy wykorzystaniu funkcji w arkuszu excela sam ją wskazujesz (zaznaczasz myszą), tu jednak musisz z góry ustalić (lub wykorzystać zdefiniowaną nazwę zakresu - o czy myślałem że masz wiedzę)

    Więc jeżeli daty to zakres dat to musimy to podać (bez zdefiniowanych zakresów komórek)
    Teraz nasz kod powinien wyglądać:


    Code: vb
    Log in, to see the code


    ok. wiemy że zakres od A1 do A 10 zostanie przeanalizowany

    Teraz w pętlę wrzucimy twoją funkcję a wyniki będą wpisywane w zmiennej "m". Na marginesie należy zdefiniować też zmienną "kwoty" która określa zakres komórek z kwotami, inaczej nie zadziała.


    Code: vb
    Log in, to see the code



    Teraz mamy zmienną "m" która ma wartości sum dla kolejnego dnia. Warto więc w tak zwanym "między czasie" sprawdzać czy dana wartość to maksimum (tak jak zaplanowałeś) [wcześniej zerując maksimum]

    Jeżeli wyliczona wartość jest większa od "max" to zapisz do zmiennej "max".

    Code: vb
    Log in, to see the code


    Po wykonaniu mamy najwyższą wartość, ale który to dzień ?
    Warto więc w dodatkowej zmiennej zapisać która to data pozwoliła spełnić warunek "max"

    Code: vb
    Log in, to see the code


    teraz już zostaje wkazać efekty obliczeń czyli msgbox no i oczywiście wcześniejsza deklaracja zmiennych więc:


    Code: vb
    Log in, to see the code


    Tak dla zasady zwróć uwagę co ci sugerowałem wcześniej.

    ----------------------------
    Jeżeli nie wykorzystasz próby przekazania wiedzy a wyłącznie "gotowca" będziesz miał straszne koszmary nocne - zaufaj mi - do tej pory nawet nie wiesz co to strach. :twisted: :evil: :twisted:
  • #11
    PrzemekCz
    Level 7  
    wielkie dzięki za pomoc, makro działa.
    Program napisałem sam, bazując na różnych materiałach.