Forum elektroda.pl

Regulamin  | Punkty  | Dodaj...  | Ostatnie  | Szukaj  | Rejestracja  | Zaloguj

Ta strona używa cookie. Dowiedz się więcej o celu ich używania i zmianie ustawień cookie w przeglądarce.
Korzystając ze strony wyrażasz zgodę na używanie cookie, zgodnie z aktualnymi ustawieniami przeglądarki.

excel - pomoc w sumowaniu danych


Napisz nowy temat  Odpowiedz do tematu      Strona Główna -> Forum elektroda.pl -> Komputery Serwis -> Komputery Software -> excel - pomoc w sumowaniu danych
Autor
Wiadomość
PIOOTRaS82
Poziom 5
Poziom 5


Dołączył: 28 Gru 2006
Posty: 11
Miasto: warszawa

Post#1 Post autora tematu 23 Sty 2013 22:16   

excel - Sumowanie danych


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.
Powrót do góry
   
Google


Google Adsense


Post# 23 Sty 2013 22:16   





Powrót do góry
   
Nemonek
Poziom 17
Poziom 17


Dołączył: 09 Lis 2006
Posty: 371
Miasto: Krosno

Post#2 23 Sty 2013 23:01   

Re: excel - Sumowanie danych


Skorzystaj z funkcji arkusza LICZ.JEŻELI
Powrót do góry
   
PIOOTRaS82
Poziom 5
Poziom 5


Dołączył: 28 Gru 2006
Posty: 11
Miasto: warszawa

Post#3 Post autora tematu 23 Sty 2013 23:33   

Re: excel - Sumowanie danych


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 |
Powrót do góry
   
Google


Google Adsense


Post# 23 Sty 2013 23:33   





Powrót do góry
   
Nemonek
Poziom 17
Poziom 17


Dołączył: 09 Lis 2006
Posty: 371
Miasto: Krosno

Post#4 24 Sty 2013 00:40   

Re: excel - Sumowanie danych


TUTAJ chyba znajdziesz rozwiązanie
Powrót do góry
   
Google


Google Adsense


Post# 24 Sty 2013 00:40   





Powrót do góry
   
PIOOTRaS82
Poziom 5
Poziom 5


Dołączył: 28 Gru 2006
Posty: 11
Miasto: warszawa

Post#5 Post autora tematu 24 Sty 2013 00:59   

Re: excel - Sumowanie danych


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 :(
Powrót do góry
   
andrefff
Poziom 23
Poziom 23


Dołączył: 05 Sty 2010
Posty: 2775
Miasto: Toruń

Post#6 24 Sty 2013 01:30   

Re: excel - Sumowanie danych


=JEŻELI(DŁ(A1)=0;0;DŁ(A1)-DŁ(PODSTAW(A1;"a";""))) Takie coś?
Powrót do góry
   
dt1
Moderator - Komputery Serwis
Moderator - Komputery Serwis


Dołączył: 12 Mar 2003
Posty: 8611
Miasto: Gdynia

Post#7 24 Sty 2013 05:36   

Re: excel - Sumowanie danych


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ć.

Kod Visual Basic - [rozwiń]
 
Sub Makro1()
'
' Makro1 Makro
' Makro zarejestrowane 2013-01-24, autor Darek
'

'
Dim maxIndex, maxX, maxY, nextFree, tmp, x, q As Integer
 
Range("A1").Select
maxX = ActiveCell.SpecialCells(xlLastCell).Column
maxY = ActiveCell.SpecialCells(xlLastCell).Row
maxIndex = Round(maxX / 2)
 
Dim nazwy() As String
Dim wartosci() As Integer
ReDim nazwy(maxIndex)
ReDim wartosci(maxIndex)
 
While maxY > 1
nextFree = 1
 
While Selection.End(xlToRight).Column = 2
ActiveCell.Offset(1, 0).Activate
maxY = maxY - 1
Wend
 
For x = 0 To Selection.End(xlToRight).Column - 2 Step 2
tmp = -1
For q = 1 To nextFree
If nazwy(q) = ActiveCell.Offset(0, x).Value Then
tmp = q
Exit For
End If
Next q
 
If (tmp = -1) Then
nazwy(nextFree) = ActiveCell.Offset(0, x).Value
wartosci(nextFree) = ActiveCell.Offset(0, x + 1).Value
nextFree = nextFree + 1
Else
wartosci(tmp) = wartosci(tmp) + ActiveCell.Offset(0, x + 1).Value
End If
Next x
 
Range(Selection, Selection.End(xlToRight)).ClearContents
For x = 1 To (nextFree - 1)
ActiveCell.Offset(0, 2 * (x - 1)).Value = nazwy(x)
ActiveCell.Offset(0, 1 + (2 * (x - 1))).Value = wartosci(x)
Next x
 
ActiveCell.Offset(1, 0).Activate
maxY = maxY - 1
Wend
 
End Sub
 


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.

Załączniki:

Moje artykuły: (Dodaj)
26 Wrzesień 2014 Fortron FSP460-60HCN - Mini test - pomiary
Powrót do góry
   
PIOOTRaS82
Poziom 5
Poziom 5


Dołączył: 28 Gru 2006
Posty: 11
Miasto: warszawa

Post#8 Post autora tematu 25 Sty 2013 00:28   

Re: excel - pomoc w sumowaniu danych


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ć :(
Powrót do góry
   
dt1
Moderator - Komputery Serwis
Moderator - Komputery Serwis


Dołączył: 12 Mar 2003
Posty: 8611
Miasto: Gdynia

Post#9 25 Sty 2013 02:16pomocny post - solucja   

Re: excel - pomoc w sumowaniu danych


Spróbuj tej wersji:
Kod Visual Basic - [rozwiń]
Sub Makro1()
'
' Makro1 Makro
' Makro zarejestrowane 2013-01-24, autor Darek
'

'
Dim maxIndex, maxX, maxY, nextFree, tmp, x, q As Integer
 
Range("A1").Select
maxX = ActiveCell.SpecialCells(xlLastCell).Column
maxY = ActiveCell.End(xlDown).Row
maxIndex = Round(maxX / 2)
 
Dim nazwy() As String
Dim wartosci() As Integer
ReDim nazwy(maxIndex)
ReDim wartosci(maxIndex)
 
While maxY > 0
For x = 1 To maxIndex
nazwy(x) = ""
wartosci(x) = 0
Next x
 
nextFree = 1
 
While Selection.End(xlToRight).Column = 2
ActiveCell.Offset(1, 0).Activate
maxY = maxY - 1
Wend
 
For x = 0 To Selection.End(xlToRight).Column - 2 Step 2
tmp = -1
For q = 1 To nextFree
If nazwy(q) = ActiveCell.Offset(0, x).Value Then
tmp = q
Exit For
End If
Next q
 
If (tmp = -1) Then
nazwy(nextFree) = ActiveCell.Offset(0, x).Value
wartosci(nextFree) = ActiveCell.Offset(0, x + 1).Value
nextFree = nextFree + 1
Else
wartosci(tmp) = wartosci(tmp) + ActiveCell.Offset(0, x + 1).Value
End If
Next x
 
Range(Selection, Selection.End(xlToRight)).ClearContents
For x = 1 To (nextFree - 1)
ActiveCell.Offset(0, 2 * (x - 1)).Value = nazwy(x)
ActiveCell.Offset(0, 1 + (2 * (x - 1))).Value = wartosci(x)
Next x
 
ActiveCell.Offset(1, 0).Activate
maxY = maxY - 1
Wend
 
End Sub
 


Moje artykuły: (Dodaj)
26 Wrzesień 2014 Fortron FSP460-60HCN - Mini test - pomiary
Powrót do góry
   
Google


Google Adsense


Post# 25 Sty 2013 02:16pomocny post - solucja   





Powrót do góry
   
PIOOTRaS82
Poziom 5
Poziom 5


Dołączył: 28 Gru 2006
Posty: 11
Miasto: warszawa

Post#10 Post autora tematu 25 Sty 2013 02:51   

Re: excel - pomoc w sumowaniu danych


Super - działa idealnie :)
Powrót do góry
   
Napisz nowy temat  Odpowiedz do tematu      Strona Główna -> Forum elektroda.pl -> Komputery Serwis -> Komputery Software -> excel - pomoc w sumowaniu danych
Strona 1 z 1



Administrator || Moderatorzy || Regulamin forum || Regulamin ogólny || Informacja o cookies || Reklama || Kontakt

Page generation time: 0.075 seconds

elektroda.pl temat RSS