ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Discussion (Misc queries) (https://www.excelbanter.com/excel-discussion-misc-queries/)
-   -   Combine Sumif and Subtotal (https://www.excelbanter.com/excel-discussion-misc-queries/195192-combine-sumif-subtotal.html)

Flu

Combine Sumif and Subtotal
 
Try to combine a sumif in a subtotal row.
But got #VALUE! instead.
Can someone advise what's wrong with this formular?

=SUMPRODUCT((ISNUMBER(MATCH($E$5:$E$10,$E$8,0))),( SUBTOTAL(9,F$5:F$10)))

or can I use a simpler one
=sumif($E$5:$E$10,$E$8,(subtotal(9,F5:F10)))

T. Valko

Combine Sumif and Subtotal
 
Try this:

=SUMPRODUCT(SUBTOTAL(3,OFFSET(E5:E10,ROW(E5:E10)-ROW(E5),0,1)),--(E5:E10=E8),F5:F10)

--
Biff
Microsoft Excel MVP


"Flu" wrote in message
...
Try to combine a sumif in a subtotal row.
But got #VALUE! instead.
Can someone advise what's wrong with this formular?

=SUMPRODUCT((ISNUMBER(MATCH($E$5:$E$10,$E$8,0))),( SUBTOTAL(9,F$5:F$10)))

or can I use a simpler one
=sumif($E$5:$E$10,$E$8,(subtotal(9,F5:F10)))




Flu

Combine Sumif and Subtotal
 
That's work perfectly well.
But can you breifly explain the formlar?
It is so long and complicated.



"T. Valko" wrote:
Try this:

=SUMPRODUCT(SUBTOTAL(3,OFFSET(E5:E10,ROW(E5:E10)-ROW(E5),0,1)),--(E5:E10=E8),F5:F10)

--
Biff
Microsoft Excel MVP


"Flu" wrote in message
...
Try to combine a sumif in a subtotal row.
But got #VALUE! instead.
Can someone advise what's wrong with this formular?

=SUMPRODUCT((ISNUMBER(MATCH($E$5:$E$10,$E$8,0))),( SUBTOTAL(9,F$5:F$10)))

or can I use a simpler one
=sumif($E$5:$E$10,$E$8,(subtotal(9,F5:F10)))





T. Valko

Combine Sumif and Subtotal
 
Ok, let's see....

The SUBTOTAL functions are designed to work on filtered data. However, they
aren't designed to work based on conditional requirements. So, we have to
"trick" SUBTOTAL into doing what we want it to do and use it to arrive at a
conditional sum or SUMIF.

SUBTOTAL aggregates its calculation per row and then returns the result of
that aggregation. We need to get SUBTOTAL to calculate each row and return
an individual result for each row instead of an aggregated result. We do
this with the OFFSET function.

When the filter is not applied (show all), the result of each iteration of
SUBTOTAL will be 1 (provided there are no empty cells within the range).
When the filter is applied those rows that are filtered will will return a
result of 0. This array of 1s and 0s is then multiplied together with the
other conditional test and the values we want to sum.

The conditional test: (E5:E10=E8), will return an array of TRUE or FALSE.
These get coerced into 1s and 0s by using the double
unary: --. --(E5:E10=E8)

So, we end up with a matrix like this when the range is unfiltered. The 1st
column is the array of SUBTOTAL results. The 2nd column is the array
of --(E5:E10=E8) results and the 3rd column are the values we want to sum.

1...1...5
1...1...7
1...0...3
1...1...1
1...0...5

Now, when we apply the filter the matrix may look like this. The only thing
that changes is the first column which is our array of SUBTOTALS. A 0 in the
first column of the matrix indicates that that row has been filtered out of
the range.

0...1...5
1...1...7
0...0...3
0...1...1
1...0...5

So, these columns are then multiplied together and summed to arrive at our
desired result:

Unfiltered:

1...1...5 = 1*1*5 = 5
1...1...7 = 1*1*7 = 7
1...0...3 = 1*0*3 = 0
1...1...1 = 1*1*1 = 1
1...0...5 = 1*0*5 = 0

Result = 13

Filtered:

0...1...5 = 0*1*5 = 0
1...1...7 = 1*1*7 = 7
0...0...3 = 0*0*3 = 0
0...1...1 = 0*1*1 = 0
1...0...5 = 1*1*5 = 0

Result = 7


exp101
--
Biff
Microsoft Excel MVP


"Flu" wrote in message
...
That's work perfectly well.
But can you breifly explain the formlar?
It is so long and complicated.



"T. Valko" wrote:
Try this:

=SUMPRODUCT(SUBTOTAL(3,OFFSET(E5:E10,ROW(E5:E10)-ROW(E5),0,1)),--(E5:E10=E8),F5:F10)

--
Biff
Microsoft Excel MVP


"Flu" wrote in message
...
Try to combine a sumif in a subtotal row.
But got #VALUE! instead.
Can someone advise what's wrong with this formular?

=SUMPRODUCT((ISNUMBER(MATCH($E$5:$E$10,$E$8,0))),( SUBTOTAL(9,F$5:F$10)))

or can I use a simpler one
=sumif($E$5:$E$10,$E$8,(subtotal(9,F5:F10)))







T. Valko

Combine Sumif and Subtotal
 
Ooops...one minor typo at the very end of the post:

Filtered:
0...1...5 = 0*1*5 = 0
1...1...7 = 1*1*7 = 7
0...0...3 = 0*0*3 = 0
0...1...1 = 0*1*1 = 0
1...0...5 = 1*1*5 = 0


That last line should be:

1...0...5 = 1*0*5 = 0

--
Biff
Microsoft Excel MVP


"T. Valko" wrote in message
...
Ok, let's see....

The SUBTOTAL functions are designed to work on filtered data. However,
they aren't designed to work based on conditional requirements. So, we
have to "trick" SUBTOTAL into doing what we want it to do and use it to
arrive at a conditional sum or SUMIF.

SUBTOTAL aggregates its calculation per row and then returns the result of
that aggregation. We need to get SUBTOTAL to calculate each row and return
an individual result for each row instead of an aggregated result. We do
this with the OFFSET function.

When the filter is not applied (show all), the result of each iteration of
SUBTOTAL will be 1 (provided there are no empty cells within the range).
When the filter is applied those rows that are filtered will will return a
result of 0. This array of 1s and 0s is then multiplied together with the
other conditional test and the values we want to sum.

The conditional test: (E5:E10=E8), will return an array of TRUE or FALSE.
These get coerced into 1s and 0s by using the double
unary: --. --(E5:E10=E8)

So, we end up with a matrix like this when the range is unfiltered. The
1st column is the array of SUBTOTAL results. The 2nd column is the array
of --(E5:E10=E8) results and the 3rd column are the values we want to sum.

1...1...5
1...1...7
1...0...3
1...1...1
1...0...5

Now, when we apply the filter the matrix may look like this. The only
thing that changes is the first column which is our array of SUBTOTALS. A
0 in the first column of the matrix indicates that that row has been
filtered out of the range.

0...1...5
1...1...7
0...0...3
0...1...1
1...0...5

So, these columns are then multiplied together and summed to arrive at our
desired result:

Unfiltered:

1...1...5 = 1*1*5 = 5
1...1...7 = 1*1*7 = 7
1...0...3 = 1*0*3 = 0
1...1...1 = 1*1*1 = 1
1...0...5 = 1*0*5 = 0

Result = 13

Filtered:

0...1...5 = 0*1*5 = 0
1...1...7 = 1*1*7 = 7
0...0...3 = 0*0*3 = 0
0...1...1 = 0*1*1 = 0
1...0...5 = 1*1*5 = 0

Result = 7


exp101
--
Biff
Microsoft Excel MVP


"Flu" wrote in message
...
That's work perfectly well.
But can you breifly explain the formlar?
It is so long and complicated.



"T. Valko" wrote:
Try this:

=SUMPRODUCT(SUBTOTAL(3,OFFSET(E5:E10,ROW(E5:E10)-ROW(E5),0,1)),--(E5:E10=E8),F5:F10)

--
Biff
Microsoft Excel MVP


"Flu" wrote in message
...
Try to combine a sumif in a subtotal row.
But got #VALUE! instead.
Can someone advise what's wrong with this formular?

=SUMPRODUCT((ISNUMBER(MATCH($E$5:$E$10,$E$8,0))),( SUBTOTAL(9,F$5:F$10)))

or can I use a simpler one
=sumif($E$5:$E$10,$E$8,(subtotal(9,F5:F10)))









All times are GMT +1. The time now is 04:53 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com