Anna S.

Anna S. Specjalista ds. kadr
i płac, (szukam
nowych wyzwań)

Temat: Warunkowe sumowanie poszczególnych wierszy

Witam serdecznie,

Potrzebuję pomocy przy następującym problemie:

Istnieją trzy arkusze:
1 - słownik (dwie kolumny, pierwsza to nazwa, druga to znacznik (możę być coś innego niż 1)):

Nazwisko
Imię
AAA 1
BBB
CCC
DDD 1
EEE 1

2 - dane (w pierwszym wierszu są nazwy kolumn odpowiadające danym z pierwszej kolumny 1 arkusza (słownik) może być ich mniej lub więcej niż w 1 arkuszu, w kolejnych wierszach nazwisko, imię i poszczególne kwoty)

nazwisko imię AAA BBB CCC DDD
Nowak Jan 100 30 776 88
Kowalski Piotr 150 444 55 9

3 - wynik (z danych w 2 akruszu) - pierwsze dwie kolumny to nazwisko i imię osoby skopiowane z pierwszych dwóch kolumn arkusza 2 (dane), trzecia kolumna to wynik dla poszczególnych osób - suma kwot z kolumn od AAA do EEE z takim warunkiem aby sumować tylko dane z kolumn dla których w 1 arkuszu jest znacznik "1"

nazwisko imię suma
Nowak Jan 188
Kowalski Piotr 159

Chodzi o rozwiązanie elastyczne, które przy zmianie zakresu danych AAA - EEE (np. do PPP) nie będzie wymagało modyfikacji funkcji.
Próbowałam to rozwiązać za pomocą poniższych fukncji, ale coś nie do końca mi to wychodzi:
=SUMA.JEŻELI
=SUMA.WARUNKÓW

pozdrawiam i z góry dziękuję za pomoc,
Ania
Grzesiek Bienias

Grzesiek Bienias Opis w High
Definition i
dźwiękiem 7.1 :)

Temat: Warunkowe sumowanie poszczególnych wierszy

.Grzesiek Bienias edytował(a) ten post dnia 01.05.13 o godzinie 19:06
Krzysztof B.

Krzysztof B. Starszy programista,
Agencja
Restrukturyzacji i
Moderniza...

Temat: Warunkowe sumowanie poszczególnych wierszy

najszybsze w dzialaniu to nie bedzie, ale na pewno najbardziej elastyczne - aby nie miec problemow z pojawiajaacymi sie nowymi zakresami proponowalbym wykorzystac ponizsza funkcje [uzytkownika] z "zapasem" zakresow, np:
=Function_For_Anna(Arkusz1!A2:B255;Arkusz2!B1:AA1;Arkusz2!B2:AA2)
255 znacznikow sprawdzanych w kolumnach do AA
ponizsze jest w jakims stopniu "odporne" na bledy: sprawdza czy zdefiniowane sa dokladnie 2 kolumny dla znacznikow, sprawdza czy podany jest dokladnie 1 wiersz z nazwami naglowkow i 1 wiersz z danymi, sprawdza czy ilosc kolumn naglowkow i danych jest taka sama, czy nazwy naglowkow nie sa pustymi nazwami. Domyslnie znacznikiem powodujacym sumowanie jest 1, ale w samej funkcji mozna to zmienic - ostatni parametr. Ozywiscie nie ma problemu aby nad funkcja popracowac pod katem wlasnych potrzeb i uznania.

'w Excelu, po Alt+F11, w inspektorze obiektow wstawic ppm Module i wkleic ponizsza zawartosc. W funkcjach pojawi sie nowa kategoria funkcji "Zdefiniowane przez użytkownika".
Function Function_For_Anna(DefinicjaZnacznikow As Range, Naglowki As Range, Dane As Range, Optional ZNACZNIK As Variant = 1) As Double
Dim dResult As Double
Dim i As Integer
Dim j As Integer
Dim bIsFinded As Boolean
Dim bEndLoop As Boolean
Dim sNazwaKol As String
Dim sNazwaZnacz As String

On Error GoTo ErrLab
dResult = 0
'Definicja obszaru znacznikow musi miec tylko 2 kolumny
If DefinicjaZnacznikow.Columns.Count = 2 Then
'Definicja obszaru informacji o naglowkach musi miec tylko 1 wiersz
If Naglowki.Rows.Count = 1 Then
'Definicja obszaru z danymi musi miec tylko 1 wiersz
If Dane.Rows.Count = 1 Then
'Ilosc kolumn obszaru definicji Dane i Naglowki musi byc taka sama
If Naglowki.Columns.Count = Dane.Columns.Count Then
'Ilosc kolumn z danymi musi byc wieksza niz 0
If Naglowki.Columns.Count > 0 Then
'odczytuje nazwe kolumny z danymi
i = 1
Do
sNazwaKol = Naglowki.Cells(1, i)
'Wyszukuje nazwe kolumny na liscie definicji znacznikow
bIsFinded = False
bEndLoop = False
j = 1
Do
sNazwaZnacz = DefinicjaZnacznikow.Cells(j, 1)
'NAJWAZNIEJSZE: porownanie
If (Trim(sNazwaZnacz) <> "") And (Trim(sNazwaKol) <> "") Then
If sNazwaZnacz = sNazwaKol Then
'NAJWAZNIEJSZE: sprawdzenie znacznika i sumowanie
If DefinicjaZnacznikow.Cells(j, 2) = ZNACZNIK Then
dResult = dResult + Dane.Cells(1, i)
End If
bIsFinded = True
End If
End If
j = j + 1
If bIsFinded Or (j > DefinicjaZnacznikow.Rows.Count) Then
bEndLoop = True
End If
Loop Until bEndLoop
i = i + 1
Loop Until i > Naglowki.Columns.Count
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Function_For_Anna = dResult
Exit Function
ErrLab:
Function_For_Anna = -99999999#
End Function

Następna dyskusja:

Sumowanie zduplikowanych wi...




Wyślij zaproszenie do