Marek D.

Marek D. Kierownik projektu,
Sii

Temat: Suma częściowa inaczej?

Witam,
Gorąca prośba o sugestię - podpowiedź jak to zrobić.
Przykładowe dane są w pliku xlsx https://drive.google.com/open?id=0Bwy6LRRBLBSadm4tdmR0d... , którego objaśnienie graficzne, dla łatwiejszego zrozumienia, poniżej:

Obrazek


Kolumny A:D są wynikiem exportu z zewnętrznego programu, nie mam wpływu na zmianę output'u.

Chciałbym w kolumnie E (czerwony nagłówek) uzyskać sumy minut z kolumny C (zielone ramki) dla tych "child_record", które znajdują się pod "master record" (dla odpowiedniego "profession").
Czyli powinno być E2=55(wpisałem), E6=5, E8=30, E11=0, E12=111

Wiem, że można użyć sum częściowych, ale szukam innego sposobu, ponieważ plik ma być źródłem dla MSQuery.

Uwagi:
"profession" czasami może być jednakowe dla dwóch master_record'ów.
Nie mam doświadczenia w budowaniu makr.
Excel 2013 - Windows 8.1

Nie mam pomysłu jako to "ugryźć".
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: Suma częściowa inaczej?

Przyjęłam, że sumowane są minuty z poszczególnych child_record zawartych pomiędzy master_record, niezależnie od tego, co jest w wartości proffesion.
Makro wygląda tak:

Public Sub Sumuj()
Dim Kom As Range
Dim OstW As Long
Dim i As Long
Dim SumaMinut
OstW = Range("A" & Rows.Count).End(xlUp).Row
For Each Kom In Range("B2:B" & OstW)
If Kom.Value = "master_record" Then
SumaMinut = 0
If Kom.Offset(1, 0) = "master_record" Then
SumaMinut = 0
Else
i = 1
While Kom.Offset(i, 0) = "child_record"
SumaMinut = SumaMinut + Kom.Offset(i, 1)
i = i + 1
Wend
End If
Kom.Offset(0, 3) = SumaMinut
End If
Next Kom
End Sub

Wystarczy wstawić nowy moduł w kodzie, wkleić tam makro i uruchomić.
Krzysztof Konrad Pszczoła

Krzysztof Konrad Pszczoła Zarządzanie,
szkolenia, wdrożenia

Temat: Suma częściowa inaczej?

>
Uwagi:
"profession" czasami może być jednakowe dla dwóch master_record'ów.

Jak ma się wtedy zachować sumowanie? powinno dodać wszystkie pozycje jednakowe dla "proffesion" czy ma obliczać je niezależnie?

Pytam o to, bo może zamiast VBA łatwiej i szybciej będzie "załatwić" sprawę w PowerQuery zwłaszcza jeżeli będzie to duża baza danych.

Pozdrawiam,
KP
Marek D.

Marek D. Kierownik projektu,
Sii

Temat: Suma częściowa inaczej?

@Marzanna

Dzięki bardzo, nie znam dobrze VBA, ale chyba poradzę sobie.

@Krzysztof

Nie znam PowerQuery. Sumowanie ma być względem id_type, ale muszę ewentualnie brać pod uwagę profession. Jeśli dwa master'y będą mieć to samo profession, muszę mieć dwie sumy.
Wiem mniej więcej jakie powinny być przedziały czasowe więc w razie czego mogę dokonać ręcznej korekty.
Tabela z danymi źródłowymi nie powinna przekroczyć ~100 rekordów, w tym około 40 rekordów typu master_record, teoretycznie do zrobienia "na piechotę".
Liczyłem że dam sobie radę z formułami, ale jak napisałem nie wiem od czego zacząć, pewnie jakieś przesunięcie, index może if-y..
Andy L.

Andy L. ITM, VUB

Temat: Suma częściowa inaczej?

Formuła, która robi to co chcesz składa się z: IF(), SUM(), INDEX(), MATCH() i nie jest potrzebne VBA ani PowerQuery.
Zbigniew Szyszkowski

Zbigniew Szyszkowski sprzątacz,
Ministerstwo
Rolnictwa i Rozwoju
Wsi

Temat: Suma częściowa inaczej?

Andy..... ale ja lubię Power Query ;-)
Andy L.

Andy L. ITM, VUB

Temat: Suma częściowa inaczej?

Zbigniew S.:
Andy..... ale ja lubię Power Query ;-)

Prowokacja! :D (też lubię.... czasem)Ten post został edytowany przez Autora dnia 21.09.16 o godzinie 05:31
Mateusz M.

Mateusz M. Mateusz M.

Temat: Suma częściowa inaczej?

Może się przyda ;)

do wklejenia w e2:)

=JEŻELI(B2="master_record";JEŻELI(ORAZ(B3="master_record";B2="child_record");C2;JEŻELI(ORAZ(B3="master_record";B2="master_record";CZY.TEKST(C2));0;JEŻELI(ORAZ(CZY.PUSTA(B3);B2="child_record");C2;JEŻELI(B2="child_record";C2+H3;JEŻELI(ORAZ(B2="master_record";CZY.TEKST(C2));H3;JEŻELI(ORAZ(B2="master_record";CZY.LICZBA(C2));H2+H3;C2))))));"")Ten post został edytowany przez Autora dnia 21.09.16 o godzinie 10:15
Zbigniew Szyszkowski

Zbigniew Szyszkowski sprzątacz,
Ministerstwo
Rolnictwa i Rozwoju
Wsi

Temat: Suma częściowa inaczej?

eee...tego...noo... aż takiej kobyły to chyba nie potrzebujemy ;-)
wystarczy
=JEŻELI(B2="master_record";JEŻELI.BŁĄD(SUMA(C2:INDEKS(C3:$C$16;PODAJ.POZYCJĘ(B2;B3:$B$16;0)));SUMA(C2:$C$16));"")
to tak na szybko...być może i to da sie skrócić :-)

Andy... już taki ze mnie "prowokator"...no może dodałbym jeszcze że "prowodyr" ;-)
Andy L.

Andy L. ITM, VUB

Temat: Suma częściowa inaczej?

Mateusz M.:
Może się przyda ;)

do wklejenia w e2:)

=JEŻELI(B2="master_record";JEŻELI(ORAZ(B3="master_record";B2="child_record");C2;JEŻELI(ORAZ(B3="master_record";B2="master_record";CZY.TEKST(C2));0;JEŻELI(ORAZ(CZY.PUSTA(B3);B2="child_record");C2;JEŻELI(B2="child_record";C2+H3;JEŻELI(ORAZ(B2="master_record";CZY.TEKST(C2));H3;JEŻELI(ORAZ(B2="master_record";CZY.LICZBA(C2));H2+H3;C2))))));"")

Ou drzizaz !!!
Andy L.

Andy L. ITM, VUB

Temat: Suma częściowa inaczej?

Zbigniew S.:
eee...tego...noo... aż takiej kobyły to chyba nie potrzebujemy ;-)
wystarczy
=JEŻELI(B2="master_record";JEŻELI.BŁĄD(SUMA(C2:INDEKS(C3:$C$16;PODAJ.POZYCJĘ(B2;B3:$B$16;0)));SUMA(C2:$C$16));"")
to tak na szybko...być może i to da sie skrócić :-)

Andy... już taki ze mnie "prowokator"...no może dodałbym jeszcze że "prowodyr" ;-)

Da się :)

Zbyszek, jednym słowem : PROWOK :)))) (chociaż to się kojarzy z czasami tzw. jedynie słusznymi)
Zbigniew Szyszkowski

Zbigniew Szyszkowski sprzątacz,
Ministerstwo
Rolnictwa i Rozwoju
Wsi

Temat: Suma częściowa inaczej?

Andy L.:

Da się :)

Absolutnie wierzę na słowo :-)
Andy L.:
(chociaż to się kojarzy z czasami tzw. jedynie słusznymi)

Do tamtych czasów właśnie piłem :-)... choć patrząc na współczesne mniemam, że bardzo łatwo bym "odnowił" tytuł mając często inne, od jedynie słusznego, zdanie ;-)
Andy L.

Andy L. ITM, VUB

Temat: Suma częściowa inaczej?

Zbigniew S.:
Andy L.:

Da się :)

Absolutnie wierzę na słowo :-)
Andy L.:
(chociaż to się kojarzy z czasami tzw. jedynie słusznymi)

Do tamtych czasów właśnie piłem :-)... choć patrząc na współczesne mniemam, że bardzo łatwo bym "odnowił" tytuł mając często inne, od jedynie słusznego, zdanie ;-)

Podpisuję się pod tymi słowy obiema "ręcamy" :)

Edit:
A tak poza konkursem: jakie to góry są? (nie mam pamięci do krajobrazów)Ten post został edytowany przez Autora dnia 21.09.16 o godzinie 11:06
Mateusz M.

Mateusz M. Mateusz M.

Temat: Suma częściowa inaczej?

Andy L.:
Zbigniew S.:
eee...tego...noo... aż takiej kobyły to chyba nie potrzebujemy ;-)
wystarczy
=JEŻELI(B2="master_record";JEŻELI.BŁĄD(SUMA(C2:INDEKS(C3:$C$16;PODAJ.POZYCJĘ(B2;B3:$B$16;0)));SUMA(C2:$C$16));"")
to tak na szybko...być może i to da sie skrócić :-)

Andy... już taki ze mnie "prowokator"...no może dodałbym jeszcze że "prowodyr" ;-)

Da się :)

Zbyszek, jednym słowem : PROWOK :)))) (chociaż to się kojarzy z czasami tzw. jedynie słusznymi)

Fajnie uproszczona funkcja podoba mi się

proszę zmień tylko dodatkowo dla przypadków:

Jeżeli w N/A pojawi się wartość = to aby formuła zliczyła tylko wartości dla danego mastera - opcja

plus jeżeli tablica ma więcej niż 22 wiersze, aby dynamicznie formuła uwzględniała także - dodatkowe wiersze - wymagane

dzięki!

na bazie propozycji Zbigniewa S. dodałem warunki jw.:

=JEŻELI(ORAZ(B2="master_record";B3="master_record");0;JEŻELI(B2="master_record";JEŻELI.BŁĄD(SUMA(C3:INDEKS(C3:INDEKS(C:C;PODAJ.POZYCJĘ(PRAWDA;INDEKS(CZY.PUSTA(C:C);0;0);0));PODAJ.POZYCJĘ(B2;B3:INDEKS(B:B;PODAJ.POZYCJĘ(PRAWDA;INDEKS(CZY.PUSTA(B:B);0;0);0));0)-1));SUMA(C3:INDEKS(C:C;PODAJ.POZYCJĘ(PRAWDA;INDEKS(CZY.PUSTA(C:C);0;0);0))));""))Ten post został edytowany przez Autora dnia 21.09.16 o godzinie 14:04



Wyślij zaproszenie do