Google Sheets Pattern Matching/RegEx for COUNTIF

25,255

Solution 1

As you identified and Wiktor mentioned COUNTIF only supports wildcards.

There are many ways to do what you want though, to name but 2

=ArrayFormula(SUM(--REGEXMATCH(E9:E13, "50-03[123][012]*")))

=COUNTA(FILTER(E9:E13, REGEXMATCH(E9:E13, "50-03[123][012]*")))

Solution 2

This is a really big hammer for a problem like yours, but you can use QUERY to do something like this:

=QUERY(E9:E13, "select count(E) where E matches '50-03[123][012]' label count(E) ''")

The label bit is to prevent QUERY from adding an automatic header to the count() column.

The nice thing about this approach is that you can pull in other columns, too. Say that over in column H, you have a number of orders for each part. Then, you can take two cells and show both the count of parts and the sum of orders:

=QUERY(E9:H13, "select count(E), sum(H) where E matches '50-03[123][012]' label count(E) '', sum(H) ''")

I routinely find this question on $searchEngine and fail to notice that I linked another question with a similar problem and other relevant answers.

Share:
25,255
Martin
Author by

Martin

Just keep coding. Current primary interests are learning JavaScript and the Google Sheets API. Together these tools can be so powerful for creating realtime data and metrics!

Updated on December 10, 2020

Comments

  • Martin
    Martin over 3 years

    The documentation for pattern matching for Google Sheets has not been helpful. I've been reading and searching for a while now and can't find this particular issue. Maybe I'm having a hard time finding the correct terms to search for but here is the problem:

    I have several numbers (part numbers) that follow this format: ##-####

    Categories can be defined by the part numbers, i.e. 50-03## would be one product category, and the remaining 2 digits are specific for a model.

    I've been trying to run this:

    =countif(E9:E13,"50-03[123][012]*")
    

    (E9:E13 contains the part number formatted as text. If I format it any other way, the values show up screwed up because Google Sheets thinks I'm writing a date or trying to do arithmetic.)

    This returns 0 every time, unless I were to change to:

    =countif(E9:E13,"50-03*")
    

    So it seems like wildcards work, but pattern matching does not?