A Microsoft Office (Excel, Word) forum. OfficeFrustration

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Home » OfficeFrustration forum » Microsoft Excel » Worksheet Functions
Site Map Home Register Authors List Search Today's Posts Mark Forums Read  

sumif with or



 
 
Thread Tools Display Modes
  #11  
Old October 13th, 2005, 07:00 PM
C Glenn
external usenet poster
 
Posts: n/a
Default

This is precisely what I was looking for. Years ago this question came
up and I recall now that SUMPRODUCT was the answer; but the
implementation looked different.

I don't understand the syntax. The help text on SUMPRODUCT states that
it is an array multiplication function. I've looked through Google for
a more complete explanation of what it will do and how to use it, but I
haven't found anything comprehensive. Do you know of a source?

Thanks.

Domenic wrote:
Try...

=SUMPRODUCT(--(D512100),--(D512900),G5:G12)

and

=SUMIF(D512,"900",G5:G12)

Hope this helps!

In article ,
C Glenn wrote:


I can't get this to work. In every case, the first criteria is applied
and the second is ignored.

Put these numbers in D, starting at D5:

45
123
789
4156
123
456
987
321


Now put these in G, starting at G5:

65
32
8546
123
646
564
6
54

If you put the following in G13:
=SUMIF(D512, {"900","100"},G5:G12)
it will return the same result as
=SUMIF(D512, {"900"},G5:G12).

The result of the first formula should be 65 less than the second.

  #12  
Old October 13th, 2005, 07:07 PM
Roger Govier
external usenet poster
 
Posts: n/a
Default

Hi

Take a look at Bob Phillips discussion document on this at
http://xldynamic.com/source/xld.SUMPRODUCT.html

Regards

Roger Govier



C Glenn wrote:

This is precisely what I was looking for. Years ago this question
came up and I recall now that SUMPRODUCT was the answer; but the
implementation looked different.

I don't understand the syntax. The help text on SUMPRODUCT states
that it is an array multiplication function. I've looked through
Google for a more complete explanation of what it will do and how to
use it, but I haven't found anything comprehensive. Do you know of a
source?

Thanks.

Domenic wrote:

Try...

=SUMPRODUCT(--(D512100),--(D512900),G5:G12)

and

=SUMIF(D512,"900",G5:G12)

Hope this helps!

In article ,
C Glenn wrote:


I can't get this to work. In every case, the first criteria is
applied and the second is ignored.

Put these numbers in D, starting at D5:

45
123
789
4156
123
456
987
321


Now put these in G, starting at G5:

65
32
8546
123
646
564
6
54

If you put the following in G13:
=SUMIF(D512, {"900","100"},G5:G12)
it will return the same result as
=SUMIF(D512, {"900"},G5:G12).

The result of the first formula should be 65 less than the second.

  #13  
Old October 13th, 2005, 07:25 PM
C Glenn
external usenet poster
 
Posts: n/a
Default

I've tried this:

=SUM(SUMIF(D512, {"100","900"}, G5:G12))
but I get the sum of all the numbers 100 (including those 900) and the
sum of all the numbers 900 (including those 100).

Am I misunderstanding something?

Alok wrote:
Hi
This is happening because both functions are returning an array. The first
function returns a single element in the array. The second function returns a
two element array. If there is no function that operates on the array of
values returned then Excel tends to use the first value of the array.
If you enclose your Sumif within a Sum function like Aladin had done you
will see that there is a difference. The second function will then return a
number which is interpreted as the Sum of all numbers where D512 is less
than 900 plus some of all numbers where the range D512 is greater than 100.
This is different than the sum of all numbers where D512 is greater than
100 or less than 900 (which is basically all numbers.) In other words the
method shown by Aladin has to be used cautiously - that is only in case of
non-overlapping ranges. In other words this is probably OK

=SUM(SUMIF(D512, {"100","900"},G5:G12))

if one intends to find the Sum of all numbers in G5 to G12 where the numbers
in D512 are either smaller than 100 or greater than 900.

Alok




"C Glenn" wrote:


I can't get this to work. In every case, the first criteria is applied
and the second is ignored.

Put these numbers in D, starting at D5:

45
123
789
4156
123
456
987
321


Now put these in G, starting at G5:

65
32
8546
123
646
564
6
54

If you put the following in G13:
=SUMIF(D512, {"900","100"},G5:G12)
it will return the same result as
=SUMIF(D512, {"900"},G5:G12).

The result of the first formula should be 65 less than the second.






Alok wrote:

Glenn,
This does work but you have to enclose them in quotes. {"100","250"}
Alok

"C Glenn" wrote:



Somewhat like an implicit OR but it's actually an implicity IN! I'm
wondering if there are any other possibilities, i.e.: 250, 125. This
doesn't work with the curlies.

Thanks.

Aladin Akyurek wrote:


=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

C Glenn wrote:



I'm trying to do this:

=SUMIF(B5:B12,OR("=D*","=?D*"),D512)

It returns zero each time.

(BTW,
=SUMIF(B5:B12,"=D*",D512)
and
=SUMIF(B5:B12,"=?D*",D512)
both work just fine and return non zero sums.)

So my question is,
Where do I put the OR, or is there another way to do this?

  #14  
Old October 13th, 2005, 07:47 PM
Alok
external usenet poster
 
Posts: n/a
Default

You are right. This is exactly what I said in my last post.
The formula
=SUM(SUMIF(D512, {"100","900"}, G5:G12))
translates to
SUMIF(D512, "100", G5:G12)+SUMIF(D512, "900", G5:G12))
Alok


"C Glenn" wrote:

I've tried this:

=SUM(SUMIF(D512, {"100","900"}, G5:G12))
but I get the sum of all the numbers 100 (including those 900) and the
sum of all the numbers 900 (including those 100).

Am I misunderstanding something?

Alok wrote:
Hi
This is happening because both functions are returning an array. The first
function returns a single element in the array. The second function returns a
two element array. If there is no function that operates on the array of
values returned then Excel tends to use the first value of the array.
If you enclose your Sumif within a Sum function like Aladin had done you
will see that there is a difference. The second function will then return a
number which is interpreted as the Sum of all numbers where D512 is less
than 900 plus some of all numbers where the range D512 is greater than 100.
This is different than the sum of all numbers where D512 is greater than
100 or less than 900 (which is basically all numbers.) In other words the
method shown by Aladin has to be used cautiously - that is only in case of
non-overlapping ranges. In other words this is probably OK

=SUM(SUMIF(D512, {"100","900"},G5:G12))

if one intends to find the Sum of all numbers in G5 to G12 where the numbers
in D512 are either smaller than 100 or greater than 900.

Alok




"C Glenn" wrote:


I can't get this to work. In every case, the first criteria is applied
and the second is ignored.

Put these numbers in D, starting at D5:

45
123
789
4156
123
456
987
321


Now put these in G, starting at G5:

65
32
8546
123
646
564
6
54

If you put the following in G13:
=SUMIF(D512, {"900","100"},G5:G12)
it will return the same result as
=SUMIF(D512, {"900"},G5:G12).

The result of the first formula should be 65 less than the second.






Alok wrote:

Glenn,
This does work but you have to enclose them in quotes. {"100","250"}
Alok

"C Glenn" wrote:



Somewhat like an implicit OR but it's actually an implicity IN! I'm
wondering if there are any other possibilities, i.e.: 250, 125. This
doesn't work with the curlies.

Thanks.

Aladin Akyurek wrote:


=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

C Glenn wrote:



I'm trying to do this:

=SUMIF(B5:B12,OR("=D*","=?D*"),D512)

It returns zero each time.

(BTW,
=SUMIF(B5:B12,"=D*",D512)
and
=SUMIF(B5:B12,"=?D*",D512)
both work just fine and return non zero sums.)

So my question is,
Where do I put the OR, or is there another way to do this?


  #15  
Old October 13th, 2005, 08:12 PM
Aladin Akyurek
external usenet poster
 
Posts: n/a
Default

If you like to have conditions hard-coded into your formulas...

=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

would constitute such an example. You are right about the constant array
acting as IN or as a chain of OR's.

Conditions like 250 and 125 that must kold at the same time cannot be
expressed with IN.

Some options a

[1]

=SUMIF(ConditionRange,""&125,SumRange)-SUMIF(ConditionRange,"="&250,SumRange)

[2]

=SUMPRODUCT(--(ConditionRange125),--(ConditionRange250),SumRange)

Since you are inquiring about whether a SumIf formula with an
array-constant which would work with 250 and 125...

If we look at how [1] is built, we can derive:

=SUM(SUMIF(ConditionRange,{"125","=250"),SumRang e)*{1,-1})

which could be useful in some circumstances. A variablized version would be:

=SUMPRODUCT(SUMIF(ConditionRange,X2:Y2,SumRange)*{ 1,-1})

where X2 literally houses 125 and Y2 =250. Trying to variablize [2]
the same way would not allow specifying X2:Y2 in the foregoing manner.

C Glenn wrote:
Somewhat like an implicit OR but it's actually an implicity IN! I'm
wondering if there are any other possibilities, i.e.: 250, 125. This
doesn't work with the curlies.

Thanks.

Aladin Akyurek wrote:

=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

C Glenn wrote:

I'm trying to do this:

=SUMIF(B5:B12,OR("=D*","=?D*"),D512)

It returns zero each time.

(BTW,
=SUMIF(B5:B12,"=D*",D512)
and
=SUMIF(B5:B12,"=?D*",D512)
both work just fine and return non zero sums.)

So my question is,
Where do I put the OR, or is there another way to do this?


--

[1] The SumProduct function should implicitly coerce the truth values to
their Excel numeric equivalents.
[2] The lookup functions should have an optional argument for the return
value, defaulting to #N/A in its absence.
  #16  
Old October 13th, 2005, 09:24 PM
C Glenn
external usenet poster
 
Posts: n/a
Default sumif with or

Thank you again. I'm beginning to absorb this.



Aladin Akyurek wrote:
If you like to have conditions hard-coded into your formulas...

=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

would constitute such an example. You are right about the constant array
acting as IN or as a chain of OR's.

Conditions like 250 and 125 that must kold at the same time cannot be
expressed with IN.

Some options a

[1]

=SUMIF(ConditionRange,""&125,SumRange)-SUMIF(ConditionRange,"="&250,SumRange)


[2]

=SUMPRODUCT(--(ConditionRange125),--(ConditionRange250),SumRange)

Since you are inquiring about whether a SumIf formula with an
array-constant which would work with 250 and 125...

If we look at how [1] is built, we can derive:

=SUM(SUMIF(ConditionRange,{"125","=250"),SumRang e)*{1,-1})

which could be useful in some circumstances. A variablized version would
be:

=SUMPRODUCT(SUMIF(ConditionRange,X2:Y2,SumRange)*{ 1,-1})

where X2 literally houses 125 and Y2 =250. Trying to variablize [2]
the same way would not allow specifying X2:Y2 in the foregoing manner.

C Glenn wrote:

Somewhat like an implicit OR but it's actually an implicity IN! I'm
wondering if there are any other possibilities, i.e.: 250, 125.
This doesn't work with the curlies.

Thanks.

Aladin Akyurek wrote:

=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

C Glenn wrote:

I'm trying to do this:

=SUMIF(B5:B12,OR("=D*","=?D*"),D512)

It returns zero each time.

(BTW,
=SUMIF(B5:B12,"=D*",D512)
and
=SUMIF(B5:B12,"=?D*",D512)
both work just fine and return non zero sums.)

So my question is,
Where do I put the OR, or is there another way to do this?



  #17  
Old October 13th, 2005, 09:25 PM
C Glenn
external usenet poster
 
Posts: n/a
Default sumif with or

Thanks.

Alok wrote:
You are right. This is exactly what I said in my last post.
The formula
=SUM(SUMIF(D512, {"100","900"}, G5:G12))
translates to
SUMIF(D512, "100", G5:G12)+SUMIF(D512, "900", G5:G12))
Alok


"C Glenn" wrote:


I've tried this:

=SUM(SUMIF(D512, {"100","900"}, G5:G12))
but I get the sum of all the numbers 100 (including those 900) and the
sum of all the numbers 900 (including those 100).

Am I misunderstanding something?

Alok wrote:

Hi
This is happening because both functions are returning an array. The first
function returns a single element in the array. The second function returns a
two element array. If there is no function that operates on the array of
values returned then Excel tends to use the first value of the array.
If you enclose your Sumif within a Sum function like Aladin had done you
will see that there is a difference. The second function will then return a
number which is interpreted as the Sum of all numbers where D512 is less
than 900 plus some of all numbers where the range D512 is greater than 100.
This is different than the sum of all numbers where D512 is greater than
100 or less than 900 (which is basically all numbers.) In other words the
method shown by Aladin has to be used cautiously - that is only in case of
non-overlapping ranges. In other words this is probably OK

=SUM(SUMIF(D512, {"100","900"},G5:G12))

if one intends to find the Sum of all numbers in G5 to G12 where the numbers
in D512 are either smaller than 100 or greater than 900.

Alok




"C Glenn" wrote:



I can't get this to work. In every case, the first criteria is applied
and the second is ignored.

Put these numbers in D, starting at D5:

45
123
789
4156
123
456
987
321


Now put these in G, starting at G5:

65
32
8546
123
646
564
6
54

If you put the following in G13:
=SUMIF(D512, {"900","100"},G5:G12)
it will return the same result as
=SUMIF(D512, {"900"},G5:G12).

The result of the first formula should be 65 less than the second.






Alok wrote:


Glenn,
This does work but you have to enclose them in quotes. {"100","250"}
Alok

"C Glenn" wrote:




Somewhat like an implicit OR but it's actually an implicity IN! I'm
wondering if there are any other possibilities, i.e.: 250, 125. This
doesn't work with the curlies.

Thanks.

Aladin Akyurek wrote:



=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

C Glenn wrote:




I'm trying to do this:

=SUMIF(B5:B12,OR("=D*","=?D*"),D512)

It returns zero each time.

(BTW,
=SUMIF(B5:B12,"=D*",D512)
and
=SUMIF(B5:B12,"=?D*",D512)
both work just fine and return non zero sums.)

So my question is,
Where do I put the OR, or is there another way to do this?

  #18  
Old October 17th, 2005, 07:50 PM
C Glenn
external usenet poster
 
Posts: n/a
Default sumif with or

Hey, one more question in this regard. Suppose I wanted to count the
number of cells in the same rows as those that match the specified
criteria (instead of adding them), could I do that? (I need to.)

I tried =COUNT(SUMPRODUCT(... but that returned 1.

I also tried =COUNTIF(... but I can't get it to respect more than one
criteria.
=COUNTIF(B5:B12, {"D*", "A*"})
returned the same result as
=COUNTIF(B5:B12, {"D*"})

Any ideas on this?


Aladin Akyurek wrote:
If you like to have conditions hard-coded into your formulas...

=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

would constitute such an example. You are right about the constant array
acting as IN or as a chain of OR's.

Conditions like 250 and 125 that must kold at the same time cannot be
expressed with IN.

Some options a

[1]

=SUMIF(ConditionRange,""&125,SumRange)-SUMIF(ConditionRange,"="&250,SumRange)


[2]

=SUMPRODUCT(--(ConditionRange125),--(ConditionRange250),SumRange)

Since you are inquiring about whether a SumIf formula with an
array-constant which would work with 250 and 125...

If we look at how [1] is built, we can derive:

=SUM(SUMIF(ConditionRange,{"125","=250"),SumRang e)*{1,-1})

which could be useful in some circumstances. A variablized version would
be:

=SUMPRODUCT(SUMIF(ConditionRange,X2:Y2,SumRange)*{ 1,-1})

where X2 literally houses 125 and Y2 =250. Trying to variablize [2]
the same way would not allow specifying X2:Y2 in the foregoing manner.

C Glenn wrote:

Somewhat like an implicit OR but it's actually an implicity IN! I'm
wondering if there are any other possibilities, i.e.: 250, 125.
This doesn't work with the curlies.

Thanks.

Aladin Akyurek wrote:

=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

C Glenn wrote:

I'm trying to do this:

=SUMIF(B5:B12,OR("=D*","=?D*"),D512)

It returns zero each time.

(BTW,
=SUMIF(B5:B12,"=D*",D512)
and
=SUMIF(B5:B12,"=?D*",D512)
both work just fine and return non zero sums.)

So my question is,
Where do I put the OR, or is there another way to do this?



  #19  
Old October 17th, 2005, 08:53 PM
Tom Ogilvy
external usenet poster
 
Posts: n/a
Default sumif with or

in this formula
=SUMPRODUCT(--(ConditionRange125),--(ConditionRange250),SumRange)

leave of the argument SumRange and you will get the count

=SUMPRODUCT(--(ConditionRange125),--(ConditionRange250))

--
Regards,
Tom Ogilvy


"C Glenn" wrote in message
...
Hey, one more question in this regard. Suppose I wanted to count the
number of cells in the same rows as those that match the specified
criteria (instead of adding them), could I do that? (I need to.)

I tried =COUNT(SUMPRODUCT(... but that returned 1.

I also tried =COUNTIF(... but I can't get it to respect more than one
criteria.
=COUNTIF(B5:B12, {"D*", "A*"})
returned the same result as
=COUNTIF(B5:B12, {"D*"})

Any ideas on this?


Aladin Akyurek wrote:
If you like to have conditions hard-coded into your formulas...

=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

would constitute such an example. You are right about the constant array
acting as IN or as a chain of OR's.

Conditions like 250 and 125 that must kold at the same time cannot be
expressed with IN.

Some options a

[1]


=SUMIF(ConditionRange,""&125,SumRange)-SUMIF(ConditionRange,"="&250,SumRan
ge)


[2]

=SUMPRODUCT(--(ConditionRange125),--(ConditionRange250),SumRange)

Since you are inquiring about whether a SumIf formula with an
array-constant which would work with 250 and 125...

If we look at how [1] is built, we can derive:

=SUM(SUMIF(ConditionRange,{"125","=250"),SumRang e)*{1,-1})

which could be useful in some circumstances. A variablized version would
be:

=SUMPRODUCT(SUMIF(ConditionRange,X2:Y2,SumRange)*{ 1,-1})

where X2 literally houses 125 and Y2 =250. Trying to variablize [2]
the same way would not allow specifying X2:Y2 in the foregoing manner.

C Glenn wrote:

Somewhat like an implicit OR but it's actually an implicity IN! I'm
wondering if there are any other possibilities, i.e.: 250, 125.
This doesn't work with the curlies.

Thanks.

Aladin Akyurek wrote:

=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

C Glenn wrote:

I'm trying to do this:

=SUMIF(B5:B12,OR("=D*","=?D*"),D512)

It returns zero each time.

(BTW,
=SUMIF(B5:B12,"=D*",D512)
and
=SUMIF(B5:B12,"=?D*",D512)
both work just fine and return non zero sums.)

So my question is,
Where do I put the OR, or is there another way to do this?





  #20  
Old October 17th, 2005, 08:55 PM
Aladin Akyurek
external usenet poster
 
Posts: n/a
Default sumif with or

1.

=SUM(COUNTIF(B5:B12,{"D*", "A*"}))

And: With E2 housing the D condition and F2 the A condition...

2.

=SUMPRODUCT(COUNTIF(B5:B12,E2:F2&"*"))

3.

=SUMPRODUCT(--ISNUMBER(MATCH(LEFT(B5:B12),E2:F2,0)))

C Glenn wrote:
Hey, one more question in this regard. Suppose I wanted to count the
number of cells in the same rows as those that match the specified
criteria (instead of adding them), could I do that? (I need to.)

I tried =COUNT(SUMPRODUCT(... but that returned 1.

I also tried =COUNTIF(... but I can't get it to respect more than one
criteria.
=COUNTIF(B5:B12, {"D*", "A*"})
returned the same result as
=COUNTIF(B5:B12, {"D*"})

Any ideas on this?


Aladin Akyurek wrote:

If you like to have conditions hard-coded into your formulas...

=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

would constitute such an example. You are right about the constant
array acting as IN or as a chain of OR's.

Conditions like 250 and 125 that must kold at the same time cannot
be expressed with IN.

Some options a

[1]

=SUMIF(ConditionRange,""&125,SumRange)-SUMIF(ConditionRange,"="&250,SumRange)


[2]

=SUMPRODUCT(--(ConditionRange125),--(ConditionRange250),SumRange)

Since you are inquiring about whether a SumIf formula with an
array-constant which would work with 250 and 125...

If we look at how [1] is built, we can derive:

=SUM(SUMIF(ConditionRange,{"125","=250"),SumRang e)*{1,-1})

which could be useful in some circumstances. A variablized version
would be:

=SUMPRODUCT(SUMIF(ConditionRange,X2:Y2,SumRange)*{ 1,-1})

where X2 literally houses 125 and Y2 =250. Trying to variablize [2]
the same way would not allow specifying X2:Y2 in the foregoing manner.

C Glenn wrote:

Somewhat like an implicit OR but it's actually an implicity IN! I'm
wondering if there are any other possibilities, i.e.: 250, 125.
This doesn't work with the curlies.

Thanks.

Aladin Akyurek wrote:

=SUM(SUMIF(B5:B12,{"D*","?D*"},D512))

C Glenn wrote:

I'm trying to do this:

=SUMIF(B5:B12,OR("=D*","=?D*"),D512)

It returns zero each time.

(BTW,
=SUMIF(B5:B12,"=D*",D512)
and
=SUMIF(B5:B12,"=?D*",D512)
both work just fine and return non zero sums.)

So my question is,
Where do I put the OR, or is there another way to do this?





--

[1] The SumProduct function should implicitly coerce the truth values to
their Excel numeric equivalents.
[2] The lookup functions should have an optional argument for the return
value, defaulting to #N/A in its absence.
 




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
How to use SUMIF to return sums between two values located in cells ScottBerger Worksheet Functions 1 November 18th, 2004 07:09 PM
SUMIF vs SUM(IF(..)) vs SUMPRODUCT Harlan Grove Worksheet Functions 7 July 1st, 2004 10:22 PM
SUMIF vs SUM(IF(..)) vs SUMPRODUCT Harlan Grove General Discussion 7 July 1st, 2004 10:22 PM
Multiple SUMIF functions ? Frank Kabel Worksheet Functions 0 February 26th, 2004 11:46 AM
Narrow range in Sumif formula Steve Worksheet Functions 2 January 14th, 2004 06:16 PM


All times are GMT +1. The time now is 07:57 AM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 OfficeFrustration.
The comments are property of their posters.