Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

VBA EXCEL - sumowanie i wyszukiwanie danych

Martini82 03 Apr 2015 09:18 1818 10
  • #1
    Martini82
    Level 8  
    Witam wszystkich,

    po raz kolejny wracam do vba w excelu i znowu ściana.

    Mam ciąg danych pomiarowych zawierających wartości w poszczególnych dniach roku dla kilku lat. Potrzebuję:
    - wyszukać ile jest wartości, które występowały przez określoną liczbę dni z rzędu np. 2, 3, 4 i tak do n dni, w danym roku, ale ich wartość jest większa równa 0,1
    - a potem w zestawieniu dla wyszukanych ciągów np. 2 dni podać sumę wartości elementów ciągu (czyli suma wartości dla obu dni) w danym roku - ewentualnie żeby wskazać pierwszą komórkę gdzie ciąg się zaczyna.

    Wartości w poszczególnych dniach są różne i nie zawsze występują. Jest jeszcze taka kwestia że wartość 0 również jest brana pod uwagę więc żeby odróżnić od pustej komórki wprowadziłem oznaczenia tekstowe "BZ" - dla pustej komórki, oraz "zero" dla wartości 0,0.

    Podpowiedzcie proszę jak to ugryźć (na piechotę za dużo czasu i błędów).

    Z początku próbowałem formułami wstawiać kolumny, które wypełniały się wartością 1 jeśli w kolumnie była wartość większa niż 0,1, ale nie mogę poradzić sobie ze zdefiniowaniem zakresu sumowania np. tylko dwóch komórek jeśli przed i po występuje tekst "BZ" lub "zero".
    Myślę, że makro będzie lepsze i przy najmniej na początku myślałem, że nie będzie trudne.
  • #2
    JRV
    VBA, Excel specialist
    Witaj.
    Lepiej zostawić puste komórki i pisać 0 zamiast zera, Excel jest w stanie odróżnić zero z pustą komórkę.
    Martini82 wrote:
    ich wartość jest większa równa 0,1

    Martini82 wrote:
    jeśli w kolumnie była wartość większa niż 0,1

    Określ warunek - >=0,1 czy >0,1 ?
    Martini82 wrote:
    że wartość 0 również jest brana pod uwagę

    W których przypadkach, jeśli warunek jest więcej niż 0.1?
    Martini82 wrote:
    wartości, które występowały przez określoną liczbę dni z rzędu np. 2, 3

    Od którego dnia zacząć odliczanie?
    Aby ręcznie wypełnić kilka linii dla jasności...
  • #3
    Martini82
    Level 8  
    Witaj JRV,

    Potrzebuję liczyć od pierwszego dnia roku i zestawy mieć dla kolejnych lat.
    podaję przykład dla ciągu 2 dni w pierwszych miesiącach.

    Zestaw sumy dwóch dni z wartościami >= 0.1 w 1961:
    2,3 (0,9+1,4) 22-23.01
    1,0 (0,9+0,1) 19-20.02
    1,2 (0,6+0,6) 26-27.02
    26,2 (2,7+23,5) 7-8.04
    11,6 (10,0+1,6) 15-16.04
    2,3 (0,3+2,0) 18-19.06
    1,0 (0,2+0,8) 7-8.07
    19,3 (3,5+15,8) 27-28.07
    7,0 (1,2+5,8) 6-7.08
    1,3 (0,5+0,8) 15-16.08
    12,0 (5,7+6,3) 4-5.09
    3,9 (0,3+3,6) 28-29.10
    3,1 (0,5+2,6) 9-10.11
    19,2 (9,1+10,1) 11-12.12
    3,2 (0,3+2,9) 14-15.12

    liczba zestawów: 15

    Coś takiego, kolumna (te nawiasy i daty dla ułatwienia - mi niepotrzebne) z sumami znalezionych ciągów 2 dni oraz liczbę takich ciągów.
  • #4
    JRV
    VBA, Excel specialist
    Quote:
    z sumami znalezionych ciągów 2 dni oraz liczbę takich ciągów.

    Z tablicy, naprowadzanej w Twojem pliku, tak nie wygląda



    19611962196319641965
    ile ciągów wartości 2 dni
    ile ciągów wartości 3 dni

    Ona godzi się tylko dla ilości takich ciągów, ponieważ to zajmuje po jednym wierszu.
    Ilość sum w różnych latach będzie różna, toż przedtem prosiłem wypełnić ręcznie taką tablicę (plik dołączyć), chociażby parę rządków, żeby widzieć, w którym wyglądzie chcesz wynik.
  • #5
    NAXIN
    Level 22  
    Można napisać to makro na te sumy i adresy. Taki zamysł mam, żeby zwracało w zależności od parametru albo ilość albo tablicę adresów. Np =ciagi(C2:C267,dwudniowe,0) zwróci ilość a {=ciagi(C2:C267,dwudniowe,1)} tablicę tych adresów. Tylko jak ma liczyć ciągi przełomu miesięcy? Np. okres 30.I.-12.II.1961... jest to ciąg 14-dniowy. Czy takie coś traktować jako ciąg 2-dniowy stycznia i 12-dniowy lutego czy jako 14 dniowy, niezależnie od tego czy miesiąc się kończy?
  • #6
    Martini82
    Level 8  
    NAXIN:
    nie przejmujmy się przełomem roku.

    JRV:
    Poprawiłem plik na komórki puste i zera. (Dane2)

    Ręcznie wybrałem z roku 1961 i 1962 ciągi 2 i 3 dniowe,
    dodatkowo oznaczyłem je kolorami.
    W tabeli podałem liczbę takich wystąpień (ciągów 2 lub 3 dniowych)
    a pod tabelą zestawienie z sumami.
  • Helpful post
    #8
    NAXIN
    Level 22  
    zgodnie z wcześniejszym zamysłem
    =ciagi (zakres,krotnosc, 0 lub 1 - przelacznik ilosc lub adresy)

    w przypadku przelacznika 0 wystarczy wpisac formule i nacisnac enter i pojawi sie ilosc, zas dla przelacznika 1 jest to tablica wiec trzeba zaznaczyc jakis zakres komorek, wpisac formule i ctrl+shift+enter (wtedy wpisze sie w nawiasach klamrowych i odczyta sie jako tablica)

    przyklad w załączniku

    Code: vbscript
    Log in, to see the code
  • #9
    Martini82
    Level 8  
    JRV:

    wow, nie sądziłem, że to nie będzie takie skomplikowane,
    stokrotne dzięki!!!

    Naxin:

    nie znałem tej funkcji "ciagi", bardzo ciekawa alternatywa do makra,
    z radością poćwiczę. Tobie również serdecznie dziękuję.

    Mam do przygotowania taki zestaw dla 50lat więc zrobię modyfikację, zobaczę jak wyjdzie i dam znać.

    Jeszcze raz pięknie wam dziękuję. Tematu jeszcze nie zamykam.
  • #10
    JRV
    VBA, Excel specialist
    Martini82 wrote:
    Mam do przygotowania taki zestaw dla 50lat

    Wyniki dla sumy w tym przypadku wygodnie umieszczone pionowo, a nie poziomo jak w poprzednim przykładzie
  • #11
    NAXIN
    Level 22  
    Martini82 wrote:

    Naxin:
    nie znałem tej funkcji "ciagi", bardzo ciekawa alternatywa do makra,
    z radością poćwiczę. Tobie również serdecznie dziękuję.


    Gdyż ta funkcja jeszcze wczoraj wieczorem nie istniała ;) To tak na prawdę jest makro, tylko napisałem je w formie funkcji (formuły) w arkuszu, żeby wygodniej było Tobie korzystać. Powodzenia w obróbce danych :)