Explanation
This example uses the UNIQUE function together with the FILTER function. The FILTER function removes data that does not meet required criteria, and the UNIQUE function further limits results to unique values only.
Working from the inside out, the FILTER function is used to collect source data in group B with a quantity greater than 5:
FILTER(B5:B16,(C5:C16="b")*(D5:D16>5)) // group is b, qty over 5
Inside FILTER, the expression used for the include argument is:
(C5:C16="b")*(D5:D16>5)
This is an example of using boolean logic to construct required logical criteria. The result is a boolean array like this:
{0;1;0;0;0;1;0;1;0;0;1;1}
This array is used to filter data, and the FILTER function returns another array as a result:
{"amber";"purple";"purple";"pink";"pink"}
This array is returned to the UNIQUE function as the array argument. UNIQUE then removes duplicates, and returns the final array:
{"amber";"purple";"pink"}
UNIQUE and FILTER are dynamic functions . If source data changes, output will update immediately.
Dynamic source range
Because ranges are hardcoded directly into the formula, they won’t resize if source data is added or deleted. To use a dynamic range that will automatically resize when needed, you can use an Excel Table , or create a dynamic named range with a formula.
Dynamic Array Formulas are available in Office 365 only.
Explanation
Although FILTER is commonly used to filter rows, you can also filter columns. The trick is to use an include argument that operates on columns instead of rows. In this example, we use a hard-coded array constant to filter out unwanted columns, but you can also use a logical expression that returns the same kind of array in a dynamic way. Note: the named range data is used for convenience only; a regular range reference will also work fine.
Working from the inside out, the FILTER function is used to filter out the middle column, “Qty”, like this:
FILTER(data,{1,0,1}) // remove middle column
The array constant {1,0,1} is what does the actual filtering, and notice this is a horizontal array , separated by commas. The result from FILTER is a two-dimensional array with 2 columns and 11 rows like this:
{"Red","East";
"Blue","South";
"Green","North";
"Red","North";
"Blue","East";
"Green","North";
"Red","North";
"Blue","South";
"Green","North";
"Red","North";
"Blue","East"}
Notice data in the “Qty” column has been removed. This array is delivered to the UNIQUE function , which can automatically extract unique values from data with adjacent columns. The UNIQUE function returns a smaller two-dimensional array with 2 columns and 5 rows like this:
{"Red","East";
"Blue","South";
"Green","North";
"Red","North";
"Blue","East"}
Notice this array contains only the unique combinations of Color and Region. This smaller array is then handed off to the SORT function , which returns the same data, sorted by Color, as seen in the example. The SORT function is optional and can be removed.
This is a nice example of nesting one function inside another. When you see a formula created this way, learn to read from the inside out. The inner functions deliver values to the outer functions. The outermost function returns the final result.