I'm trying to utilize the syntax for OR like criteria for a COUNTIFS function in Excel. However, when trying use cell references, it just tells me
There is a problem with this formula
Function: =SUM(COUNTIFS(rosterTable[lastDayWithClient], {">="&A7,""}))
Specifically if I'm trying to use &A7 to concatenate the criteria with a cell value, it fails.
">="&A7 is not an allowed entry in an array constant.
Per Excel Help: Array constants can contain numbers, text, logical values (such as TRUE and FALSE), and error values.
As #ScottCraner indicated, you can accomplish the same by summing separate COUNTIF functions. The AGGREGATE function, or various types of SUMPRODUCT implementations may also provide a solution.
Related
Looking to try and find the following in Excel but am having issues getting this to work.
I have Dates in Column A which need to be checked against Dates in the Query Column to compare. I want to count all records where the comparison column is greater than the date in A5 or is an empty cell. There are other conditions that I will also want to check but cannot seem to get this to work.
=COUNTIFS(Query1[Purchased Date],OR(Query1[Purchased Date]="",Query1[Purchased Date]>A5))
use:
=SUMPRODUCT(--((Query1[Purchased Date]="")+(Query1[Purchased Date]>A5)>0))
You can use an array function instead of countif.
Suppose your dates are in the range A2:A25 and your reference date is in cell B2.
If you type in any other cell
=SUM((A2:A25>B2)+(A2:A25=""))
and hit Ctrl+Shift+Enter it will give you the count you want.
This happens because Excel will resolve the first inner parentheses (A2:A25>B2) as an array of TRUE/FALSE, and does the same to the second (A2:A25=""). Next it will sum them, which is equivalent to the OR operation, and yields as a result an array of zeros (FALSE) and ones (TRUE). It wraps up by summing this array (with the function sum), all in one cell.
Perhaps this is more of a comment than an answer, but in this particular case you can just add the two separate totals:
=COUNTIF(Query1[Purchased Date],"")+COUNTIF(Query1[Purchased Date],">"&A5)
because the conditions are mutually exclusive.
Whether this helps or not depends on what additional criteria you want to add.
BTW there are two issues with your original formula:
(1) If you are combining lists of values with OR logic, you have to use addition instead (as in the two answers which use Sum or Sumproduct).
(2) The syntax of a Countif or Countifs where the range has to be kept separate from the criteria won't let you do what you want to do, so this again leads you to Sum or Sumproduct.
I am attempting to use an array formula with multiple criteria in an AVERAGEIFS formula.
=AVERAGEIFS('sheet1'!$R:$R,'sheet1'!$B:$B,{"a","b","c","d","e","f","g","h","i"},'sheet1'!$A:$A,Q$2)
The formula only seems to be calculating the first criteria that is within the array ("a").
I searched the forums, but I am not seeing anything that directly relates to this this.
Any and all help would be greatly appreciated!
The trick when using an array inside something like AVERAGEIFS is to then wrap it in AVERAGE. However, this will take the average of the averages which is probably not what you want. This method however does work well with Counts and Sums from which you can make your own average.
=SUM(SUMIFS(SumRange,CriteriaRange,{"a","b","c"}))/SUM(COUNTIFS(CriteriaRange,{"a","b","c"}))
This will be the same answer as if you had used Average(<select only the cells with "a", "b", "c" values>)
And to elaborate on how the Average(AverageIfs()) process works you can see the difference when you Evaluate your formula
There AverageIfs only regarded the first argument of the array.
However when it is returning a value to another function which itself can take an array as an argument the array is preserved
I have an array formula that refers to a drop down cell ($AG$7) to determine which cells to evaluate. This works well, however, I need to include an additional item in the drop down which is "All".
When this is selected, I want the array formula to use "*" to return all instances from the array, but i can't get it to work.
This is the formula I'm currently using;
={SUM(IF((tblSkillsMatrix[Role]=[#Role])*(INDIRECT("tblSkillsMatrix["&V$2&"]")=$AG$7),1,0))}
I've tried using
={SUM(IF((tblSkillsMatrix[Role]=[#Role])*(INDIRECT("tblSkillsMatrix["&V$2&"]")="*"&$AG$7),1,0))}
and
={SUM(IF((tblSkillsMatrix[Role]=[#Role])*(INDIRECT("tblSkillsMatrix["&V$2&"]")="*"&$AG$7&"*"),1,0))}
But these don't work.
Does anybody have any ideas?
Thanks
A explicit = comparison cannot use wildcards. COUTIFS and SUMIFS can. As far as I see, you want to count only (conditional sum 1 and 0).
Problem is, COUTIFS and SUMIFS will not deal with INDIRECT ranges. But INDIRECT can and should (because of its volatile bahavior) often replaced by INDEX- MATCH.
So:
=COUNTIFS(tblSkillsMatrix[role],[#role],INDEX(tblSkillsMatrix,,MATCH($V$2,tblSkillsMatrix[#Headers],0)),"*"&$AG$7)
If $AG$7 is empty then it counts independent of the column named in $V$2.
Btw.: Within a table (ListObject) this needs not be entered as a array formula.
This is not 100% replacement of your formula since it not works if $V$2 is empty and so no table column title is given. Your formula will then look at all columns but this is not possible using COUNTIFS where each additional range must have the same number of columns as the criteria_range1 argument. So if $V$2 shall also can be empty, then this will not work.
If so then you could use
{=SUM((tblSkillsMatrix[role]=[#role])*(LEFT(INDIRECT("tblSkillsMatrix["&$V$2&"]"),LEN($AG$7))=$AG$7))}
Advantage: both $V$2 and $AG$7can be empty.
Disadvantage: Volatile behavior of INDIRECT and this formula then must be a array formula even in a ListObject-table. It must be confirmed using Ctrl+Shift+Enter.
I have a curious question about using the "OR" in an excel SUMIF.
Basically, in a
SUMIF(A:A,"Cat" OR "Dog", C1:C10)
How can I use the OR function in an excel SUMIF function?
You need to wrap the different OR parameters into curly brackets and enclose the whole Sumif in a SUM function, because Sumif will return an array of values that need to be summed up.
Also, the two ranges need to be the same size.
=SUM(SUMIF(A1:A10,{"cat","dog"}, C1:C10))
I need to use the Excel Indirect() function to reference a non-contiguous range. This (How to define a non continuous range in COUNTIF) answer gives an example.
In summary, the OP has two ranges, C1:C15 and A16. Each range contains either an A or a B, and the way to count the number of B's across these two ranges is
=SUM(COUNTIF(INDIRECT({"C1:C15","A16"}),"B"))
If I change all the B's to 1's and the A's to 0's, and change this formula slightly to
=SUM(COUNTIF(INDIRECT({"C1:C15","A16"}),"1"))
Then this still works ... BUT! this doesn't:
=SUM(INDIRECT({"C1:C15","A16"}))
I can work around this, but am I missing something fundamentally magic about the COUNTIF() function, that somehow influences the INDIRECT() function to behave as expected?
It's not possible to use a non-contiguous range in COUNTIF.
What's actually happening with the first formula is that COUNTIF is being fed with an array of (two) separate ranges and therefore the result is an array of the results of two counts, then SUM is used to sum the array.
If you actually have 1s and zeroes wouldn't you just SUM them with this formula
=SUM(C1:C15,A16)
If you are just trying to find why your last formula doesn't work then, yes, I think COUNTIF does work differently - it's able to handle an array of ranges while some other functions can't. This is common to the "IFS" family of functions, so SUMIF, for example, can do the same