Utilising COUNTIF in array formula in Google Sheets - google-sheets

I have some data that I want to summarise at a grouped level, where the possible values for each group are given as a pipe-delimited string. I then perform a sumifs by summing over multiple arrays, one of which includes a COUNTIF() with a SPLIT() in order to establish if the row features in this set of values.
The formula works fine but I would ideally like it to function as an array formula so that if the number of groups changes, the number of rows the formula is applied to will also change.
See sample sheet here. Raw data is in the tab "data", the groupings data is in the tab "Groupings" and it is the formula in column C on the "Summary" tab that I want to make work as an array formula.

I think the easiest way to do this is to mark the Group on the Data sheet and then use a traditional query to add up the groups. This vlookup should do it in cell D1:
=ARRAYFORMULA({"Group";IF(A2:A="",,VLOOKUP("*|"&A2:A&"|*",{"|"&Groupings!D:D&"|",Groupings!C:C},2,0))})

Related

I need a Google Formula that counts cells that meet two conditions in a range

I have a spreadsheet that I am running reports on. I need to count some data within the B column. The data is within the same column on the same sheet tab.
This formula below looks in the B column and counts C.
=COUNTIF('Google Sheet Tab1'!B1:B1071,"C")
This didn't work either
=COUNTIFS(Google Sheet Tab1!B1:B1071,"C",Google Sheet Tab1!B1:B1071,"N")
I need a formula that looks for C and N and adds them together and displays them.
The easiest way would be to add both conditions.
Please try
=COUNTIF('Google Sheet Tab1'!B1:B1071,"C")+COUNTIF('Google Sheet Tab1'!B1:B1071,"N")
COUNTIFS would need to satisfy both conditions at the same time.
Read more about it.

How to use AVERAGEIF in Google Sheets, only addressing columns with a specific text

In Google Sheets, I'm trying to use AVERAGEIF to calculate an average of only some of the columns in another table.
The columns to be included in the average are marked by some text in a specific cell (e.g. the first or last row of that column).
Some columns are to be included in several averages, so the text in the top\bottom row would include several words (effectively meaning I'll need some sort of substring check such as FIND).
I've tried using AVERAGEIF() in conjuction with FIND() but couldn't get this to work.
Any ideas?
Here is an example of how the data sheet looks like, and how I would expect it to work
You can use following formula:
=ARRAYFORMULA(AVERAGE(IF(ISNUMBER(SEARCH(D2,A2:A9)),B2:B9,"")))
Edit:
For table mentioned in comment you must change ranges:
=ARRAYFORMULA(AVERAGE(IF(ISNUMBER(SEARCH(E2,$A$1:$C$1)),$A$2:$C$4,"")))
You can use a query
=AVERAGE(QUERY(TRANSPOSE($A$1:$D),"where Col1 contains '"&D1&"'"))
Functions used:
AVERAGE
QUERY
TRANSPOSE

Google Sheets: Group Values in rows based on duplicate value in column

I am trying to sort Google Sheets data in columns.
Raw Data
Desired Output
I know that this can be offered with some time of QUERY function but I cannot get it to work exactly how I want. I have already read through this thread on Google Sheets and this thread on Excel.
I don't think query can do exactly this: it can aggregate data in a few ways, but not in the way of "take the values and arrange in a row". I would use unique and filter for this purpose. Assuming the input columns are A,B and the output columns are C, D,... the formulas would be
C2: =unique(A2:A) to return the team numbers without repetition
D2: =transpose(filter(B2:B, A2:A=C2)) to return the matching scores, transposed to become a row.
The formula in D2 needs to be copied/dragged down the D column.

Filter one sheet by a range in another sheet

I have a Google Spreadsheet document that I'm using to maintain a reference of all business logic on various systems. It is comprised of 2 sheets:
Sheet1 is a view of all of the logic. Each row has a unique code column (column B) and many details about the logic being done in other columns
Sheet2 is a mapping of the systems to the logic. Each system is on one row. From column E onward, each cell is exactly a code from Sheet1
The relationship between code and system is many to many, so the same code may be used by many systems, and each system may have many codes.
I would like to be able to filter Sheet1 based on whether the code column in each row is found for particular systems.
Example
System A and System B are in Sheet2 rows 50 and 51
Their codes are from column E to K
Filter Sheet1 by code where code is contained in Sheet2!E50:K51. The end result should be Sheet1 shows only those codes (and of course all columns for them)
I have seen and tried a bit of the usual suspects (ARRAY_FORMULA, INDEX, LOOKUP) but I do not yet grok them fully. I thought the answer would be going to "Filter -> By Condition -> Custom Formula is" but I'm not sure what to put there.
Any help is greatly appreciated!
Short Answer
In custom formulas of filters use INDIRECT to refer to ranges in another sheet.
To test if a value is in a 2D range, compare the value and the range, coerce booleans to numbers and sum them.
Explanation
Part 1: Custom Formulas in filters
Custom formulas in filters and conditional formatting rules can only reference the same sheet, using standard notation (='sheetname'!cell). To reference another sheet in the formula, use the INDIRECT function.
Example
Assuming that the filter criteria are in A2:A3, the filter custom formula in in a sheet called Sheet1 is:
=ISNUMBER(MATCH(A2,INDIRECT("Sheet2!$A$2:$A$3"),0))
Part 2: Test if a value is included in a 2D array
LOOKUP only could look for values in a single column or single row, by the other hand AND and OR functions can't be used in array formulas so, instead of use them we will compare a scalar value with the 2D range. This will return a 2D array of TRUE/FALSE values that we will coerce to number (1 for TRUE, 0 for FALSE) and sum them.
The final custom formula is the following one:
=ArrayFormula(SUM(N(A2=INDIRECT("Sheet2!E50:K51"))))
References
Filter your data
Apply conditional formatting rules

Is it possible to set a default value of zero when using COUNTA function in Google Sheets?

I'm using a pivot table in a Google Spreadsheet that counts the occurrences of different types of event-types on given dates. The events are listed on one sheet, with a column for "Date" and column for "Type." Based on this a Pivot Table is produced.
The trouble is that for dates when an event-type is non-existent, COUNTA returns empty. I'd rather it return 0.
The reason is for charting and statistical purposes when you create a chart from this data, it interpolates between values, ignoring empty cells. I'd prefer that it display zero on the chart on the days when these event types don't exist...
Is this possible?
UPD: sorry, I've misunderstood what you need.
What if, on another worksheet, you write the following?
=arrayformula(IF('PivotSheetName'!A1:Z100="";0;'PivotSheetName'!A1:Z100))
(This formula makes a copy of your Pivot table on the new worksheet,
replacing empty cells with 0; moreover, the control elements of the
pivot table are copied to the new worksheet as well)

Resources