## Explanation

In this example, the goal is to compare two columns and return the count of matches in corresponding rows. A good way to solve this problem is to use the SUMPRODUCT function or the SUM function, as explained below.

### SUMPRODUCT function

The SUMPRODUCT function is a versatile function that handles array operations natively without any special array syntax. Its behavior is simple: it multiplies, then sums the product of arrays. Working from the inside out, we compare the range B5:B15 to D5:D15 like this:

```
B5:B15=D5:D15
```

Because there are 11 values in the first range, the result is an array with 11 TRUE and FALSE values like this:

```
{TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE}
```

In this array, the TRUE values correspond to cells in B5:B15 that match corresponding cells in D5:D15. In this state, SUMPRODUCT will actually return zero because TRUE and FALSE values are not counted as numbers in Excel by default. To get SUMPRODUCT to treat TRUE as 1 and FALSE as zero, we need to "coerce" them into numbers. The double negative (--) is a simple way to do that:

```
--(B5:B15=D5:D15)
```

This results in an array containing only 1s and 0s, which is returned directly to the SUMPRODUCT function:

```
=SUMPRODUCT({1;1;1;1;0;1;1;1;1;0;1}) // returns 9
```

With no other arrays to multiply, SUMPRODUCT simply sums the values and returns 9.

### Count non-matching rows

To count non-matching values, you can reverse the logic and use the not equal to operator (<>). The formula in G7 is:

```
=SUMPRODUCT(--(B5:B15<>D5:D15))
```

This formula returns 2, since there are two non-matching cells.

### SUM function

Traditionally, the SUMPRODUCT function has been used instead of the SUM function in Legacy Excel, because SUMPRODUCT can handle array operations without Control + Shift + Enter. In Excel 365 and Excel 2021, the formula engine handles array formulas natively, so you can use the SUM function instead without special treatment:

```
=SUM(--(B5:B15=D5:D15)) // count matches
=SUM(--(B5:B15<>D5:D15)) // count non-matches
```

For more details, see this article.