Excel provides many ways to count cells in a range that meet various criteria:

  • The DCOUNT function. The data must be set up in a table, and a separate criterion range is required.
  • The COUNT function. Simply counts the number of cells in a range that contain a number.
  • The COUNTA function. Counts the number of non-empty cells in a range.
  • The COUNTBLANK function. Counts the number of empty cells in a range.
  • The COUNTIF function. Very flexible, but often not quite flexible enough.
  • An array formula. Useful when the other techniques won’t work.

Formula Examples

Listed below are some formula examples that demonstrate various counting techniques. These formula all use a range named data.

To count the number of cells that contain a negative number:

  =COUNTIF(data,"<0")

To count the number of cells that contain the word “yes” (not case sensitive):

   =COUNTIF(data,"yes")

To count the number of cells that contain any text:

   =COUNTIF(data,"*")

To count the number of cells that contain text that begins with the letter “s” (not case-sensitive):

   =COUNTIF(data,"s*")

To count the number of cells that contain the letter “s” (not case-sensitive):

   =COUNTIF(data,"*s*")

To count the number of cells that contain either “yes” or “no” (not case-sensitive):

   =COUNTIF(data,"yes")+COUNTIF(data,"no")

To count the number of three-letter words:

   =COUNTIF(data,"???")

To count the number of cells that contain a value between 1 and 10:

   =COUNTIF(data,">=1")-COUNTIF(data,">10")

To count the number of unique numeric values (ignores text entries):

   =SUM(IF(FREQUENCY(data,data)>0,1,0))

To count the number of cells that contain an error value (this is an array formula, entered with Ctrl+Shift+Enter):

   =SUM(IF(ISERR(data),1,0))

Using the formulas in VBA

You can also use these techniques in your VBA code. For example the VBA statement below calculates the number of three-letter words in a range named data, and assigns the value to the NumWords variable:

  NumWords = Application.COUNTIF(Sheets("Sheet1").Range("data"), "???")

The other formula examples listed above can also be converted to VBA.