X

excel - pomoc w sumowaniu danych

23 Jan 2013 21:16 PIPIOOTRaS82
  • #1 23 Jan 2013 21:16
    PIOOTRaS82
    Level 9  
    Helpful post? (0)
    Witam,
    mam problem zsumowaniem danych w excelu.

    Mam dane zapisane w takiej postaci:
    wiersz1 | bbb | 1 | bbb | 2 | ccc | 3 |
    wiersz2 | ccc | 3 | ccc | 1 | ccc | 1 |

    a chcę uzyskać tak zsumowane dane że w pierwszym wierszu sprawdza ile jest bbb ccc i sumuje ilości, w drugim wierszu robi to samo.
    wiersz1 | bbb | 3 | ccc | 3 |
    wiersz2 | ccc | 5 |


    Arkusz ma b.dużo pozycji (wierszy i kolumn) więc ręczne zrobienie tego odpada.
  • #2 23 Jan 2013 22:01
    Nemonek
    Level 25  
    Helpful post? (0)
    Skorzystaj z funkcji arkusza LICZ.JEŻELI
  • #3 23 Jan 2013 22:33
    PIOOTRaS82
    Level 9  
    Topic author Helpful post? (0)
    Funkcja ta sumuje mi nie wartości przy pozycjach bbb i ccc a ilość wystąpienia w wierszu samego "bbb" i "ccc".
    W efekcie dostaje nie

    wiersz1 | bbb | 3 | ccc | 3 |
    wiersz2 | ccc | 5 |

    a coś takiego
    wiersz1 | bbb | 2 | ccc | 1 |
    wiersz2 | ccc | 3 |
  • #4 23 Jan 2013 23:40
    Nemonek
    Level 25  
    Helpful post? (0)
    TUTAJ chyba znajdziesz rozwiązanie
  • #5 23 Jan 2013 23:59
    PIOOTRaS82
    Level 9  
    Topic author Helpful post? (0)
    Dzięki za linka,
    jednak opisana funkcja "suma iloczynów"
    sprawdza się tylko dla danych sumowanych w kolumnach a ja mam dane grupowane w wierszach :(
  • #6 24 Jan 2013 00:30
    andrefff
    Level 36  
    Helpful post? (0)
    =JEŻELI(DŁ(A1)=0;0;DŁ(A1)-DŁ(PODSTAW(A1;"a";""))) Takie coś?
  • #7 24 Jan 2013 04:36
    dt1
    Moderator - Komputery Serwis
    Helpful post? (0)
    Ja to widzę przez makro, jakkolwiek do eksperta w tej dziedzinie mi na pewno daleko, więc mój kod na pewno da się porządnie zoptymalizować.

    Code: vb
    Log in, to see the code


    Makro działa przy następujących założeniach:
    - pierwsza komórka z danymi to A1, jeśli tabela ma nagłówek to Range("A1").Select na początku makro trzeba zmienić na inny (np B1, jeśli będzie nagłówek o wysokości jednego wiersza). Wypadałoby zmienić wtedy również warunek głównej pętli While maxY > 1 na poprawny (zamiast jedynki wstawić numer wiersza, od którego zaczynają się dane). Jeśli się tego nie zrobi, makro i tak się nie wysypie, ale zrobi kilka zbędnych cykli na końcu.
    - o ile umieszczenie tabeli niżej niż od pierwszego wiersza jest łatwe, nieco więcej trzeba przerobić, jeśli ma się ją przesunąć w prawo.
    - identyfikatory muszą być umieszczone w nieparzystych kolumnach (1, 3, 5, ...), a ich wartości w parzystych komórkach obok nich po prawej (czyli odpowiednio 2, 4, 6...). Makro (aby go za bardzo nie komplikować) nie sprawdza poprawności danych.
    - identyfikatory nie muszą leżeć koło siebie i i tak zostaną dodane (ale wynik nie będzie sortowany - decyduje kolejność odnalezienia poruszając się od lewej strony).
    - wielkość liter w identyfikatorach ma znaczenia (aaa, Aaa i AAA to trzy różne identyfikatory i ich wartości nie będą dodane, chociaż po drobnej poprawce takie funkcjonowanie też byłoby możliwe.

    Makro przetestowałem na drobnym przykładzie pod Excelem 2003, ale nie zagwarantuję, że zadziała poprawnie na konkretnych danych. Przy użyciu na ważnych danych lepiej zrobić kopię zapasową przed użyciem makro. Tak gdyby coś miało nie wyjść ;) Jako że kod powstawał przez pół godziny około 4 nad ranem na pewno jest miejsce na kilka usprawnień, do których zachęcam. Na pewno znajdą się też jakieś drobne (a może i nawet większe) błędy :)

    Załączam przykład, na którym się bawiłem. Oczywiście trzeba zezwolić na wykonywanie makr.
  • #8 24 Jan 2013 23:28
    PIOOTRaS82
    Level 9  
    Topic author Helpful post? (0)
    Super robota ale niestety makro to nie działa do końca dobrze.
    Czasem w danym wierszu pomija dane i ich nie sumuje
    np dla
    aaa2 bbb3 aaa1 ccc2
    daje
    aaa3 ccc2 - pomija bbb3

    Szczerze nie mam pojęcia w jaki czemu tak się dzieje i jak można to poprawić :(
  • Helpful post
    #9 25 Jan 2013 01:16
    dt1
    Moderator - Komputery Serwis
    Helpful post? (0)
    Spróbuj tej wersji:
    Code: vb
    Log in, to see the code
  • #10 25 Jan 2013 01:51
    PIOOTRaS82
    Level 9  
    Topic author Helpful post? (0)
    Super - działa idealnie :)
Mouser  Search 4 million + Products
Browse Products