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 w Excelu - Kopiowanie sumy z uwzględnieniem dwóch warunków do II arkusza

..::B::.. 14 Lip 2012 14:10 1681 6
  • #1 14 Lip 2012 14:10
    ..::B::..
    Poziom 9  

    Witam serdecznie wszystkich zainteresowanych forumowiczów.
    Pisaniem w VBA zajmuje się dopiero tydzień i pojawił się pewin problem, który w pewnym sensie przerósł moje możliwości.

    W załączonym schematycznym pliku są dwa arkusze: "baza" i "tabela". W bazie są kolumny z datą, Dostawcą i Ilością sztuk, natomiast w tabeli chciałbym je segregować z podziałem na każdy miesiąc roku pod względem dostawcy. Prościej to ujmująć, chciałbym wiedzieć ile Dostawca1, czy tez Dostawca 2 przysłał wadliwych produktów w styczniu 2011, w lutym 2012 itd.

    Chciałbym zebrać te dane, aby móc stworzyć na ich podstawie wykresy dla każdego dostawcy na przestrzeni miesięcy.

    Zrobiłem przykładowe Makro sumujące, ale zastosowałem tam łopatologiczną metodę filtrowania i sumowania. Z pewnością jest łatwiejszy sposób, który sam rozpoznawałby pole z dostawcą i wpisywałby w tabeli ilość sztuk na przestrzeni miesięcy, bez konieczności robienia filtrowania za każdym razem (bo tych opcji będzie z czasem przybywać, a tego chce uniknać).

    Domyślam się, że będzie trzeba użyć pętli i instrukcji warunkowych.

    Drugim problemem (tak przy okazji) jest makro edytujące do Worda (również w załączniku). Działa ok, ale jest problem z tym, że otwarty dokument Worda zostaje chyba gdzieś w procesach systemu i przy wyłączaniu komputera pojawia się monit o jego niezamknięciu, a to przecież niedopuszczalne. Eksportując coś do wodra kilkakrotnie w trakcie pracy nad bazą otwiera sie kilka dokumentów "w tle"...


    Z góry dziękuję za zainteresowanie i chętnie przyjmę wszystkie podopowiedzi, algorytmy, kody lub rozwiązania.

    0 6
  • #2 14 Lip 2012 15:23
    adamas_nt
    Moderator Programowanie

    Po drobnej przeróbce można wykorzystać wbudowane funkcje Excela.

    U mnie (E2007) problem z ukrytym procesem nie występuje.

    P.S. W związku z różnicą wersji musiałem zmienić referencje. U siebie zaptaszkuj właściwą.

    0
  • #3 14 Lip 2012 16:57
    ..::B::..
    Poziom 9  

    Dzięki za taką szybką odpowiedź.
    Z tą wbudowana funkcją, to fajna sprawa. Nie wpadłem na to. Ale jest jakiś problem. Zmieniam przykładowo w bazie komórkę C7 z "ACT" na "Melektrostatyk", a w tabeli nie poprawia się tak jak powinna tylko styczniowa data dla tego producenta, ale wszystkie w 2011 roku. No i jak przeciągam dalej funkcję, to wyskakują same zera. Czy dla każdego roku trzeba pisać formułkę od nowa?

    A może to te "drobne przeróbki" którch nie zauważyłem?

    No i widzę, że dopisałeś do kodu .saveAs "proba" z tym śmiga ok, a bez tego jest bez zmian. Może to kwestia wersji offica? Ja mam 2010.

    0
  • #4 14 Lip 2012 20:00
    adamas_nt
    Moderator Programowanie

    Z rozpędu nie wpisałem znaku "$". W C4, przed skopiowaniem, powinno być

    Code:
    =SUMA.WARUNKÓW(baza!$D:$D;baza!$C:$C;C$3;baza!$A:$A;">"&$B4;baza!$A:$A;"<"&$B5)
    Jeśli chodzi o kolumnę "B", co 12 wierszy trzeba ją zmienić (scalenie w kolumnie A). Od B4 '=DATA(A$4;WIERSZ()-3;1)', od B16 '=DATA(A$16;WIERSZ()-15;1)', itd. Formuły są wprowadzane jednorazowo, więc nie powinno to stanowić problemu.

    Pytanie, czy taka opcja Ci odpowiada, czy wolisz makro w pierwszej wersji arkusza. W drugim przypadku, podobnie jak aktualnie w kolumnie B, należy zacząć od poskładania daty...

    0
  • #5 15 Lip 2012 00:50
    ..::B::..
    Poziom 9  

    Faktycznie. Poprawiłem i działa. Serdeczne dzięki!! Zmiana formułku co rok, nie przeszkadza ani trochę. To w zupełności wystarcza.
    Nie zorientowałem się, że pod nazwami miesięcy kryją się formuły. Zmieniłem zgodnie ze schematem i śmiga, tylko

    Kod: VBA
    Zaloguj się, aby zobaczyć kod

    co oznacza w powyższej linii WIERSZ() ? Rozumiem, że kryje się pod nią miesiąc, ale skąd? ;) Ułatwiłoby mi to zrozumienie i zapamiętanie na przyszłość.

    0
  • Pomocny post
    #6 15 Lip 2012 08:06
    adamas_nt
    Moderator Programowanie

    Pozwala uzyskać kolejne liczby przy kopiowaniu formuły w dół. Tutaj jako argument funkcji DATA. W tym przypadku zmiana roku (w kolumnie A) zaktualizuje tabelkę.

    W Twoim arkuszu można jeszcze prościej. W pierwszej komórce wpisujesz datę (wg. ustawień systemowych): 1-1-2011, w drugiej: 1-2-2011, zaznaczasz obydwie i przeciągasz w dół...

    1
  • #7 15 Lip 2012 11:09
    ..::B::..
    Poziom 9  

    Niesamowite są zdolności excela i Twoje adams_nt również. Dzięki za pomoc. Pozdrawiam. ;)

    0