Excel.Tips.Net Welcome toExcel.Tips.Net

Helpful Links

Tips.Net Home
ExcelTips Home
Ask an Excel Question
Make a Comment

Tips.Net Store

ExcelTips FAQ
ExcelTips Premium

Learn Access Now
Free Printable Forms

Beauty Tips
Car Tips
Cleaning Tips
College Tips
Cooking Tips
Excel2007 Tips
ExcelTips
Family Tips
Gardening Tips
Health Tips
Home Tips
Legal Tips
Money Tips
Organizing Tips
Pest Tips
Pet Tips
Wedding Tips
Word2007 Tips
WordTips

Advertise on the
ExcelTips Site

Newest Tips

Removing Borders

Converting to Octal

Filtering Columns for Unique Values

Printing Multiple Worksheets on a Single Page

Changing the Default Font

Creating a Drawing Object

Determining a Value of a Cell

 

Counting Unique Values

Summary: If you have a list of values in a range of cells, you may want to know how many unique values appear in the list. The ways you can go about making that determination depend on whether the list has blanks in it or not. This tip explains your options. (This tip works with Microsoft Excel 97, Excel 2000, Excel 2002, and Excel 2003.)

Sometimes you need to know the number of unique values in a range of cells. For instance, suppose that an instructor was teaching the following classes:

104-120
104-101
104-119
104-120

In this case there are three unique values. There is no intuitive worksheet function that will return a count of unique values, which makes one think that a user-defined function would be the logical approach. However, you can use an array formula to very easily derive the desired information. Follow these steps:

  1. Define a name that represents the range that contains your list. (This example assumes the name you define is MyRange.)
  2. In the cell where you want the number of unique values to appear type the following formula, but don't press Enter yet:
  3. =SUM(1/COUNTIF(MyRange,MyRange))
    
  4. Instead of pressing Enter, press Ctrl+Shift+Enter. This informs Excel that you are entering an array formula. The formula shown in the formula bar should now appear as follows (notice the addition of the surrounding braces, indicative of array formulas):
  5. {=SUM(1/COUNTIF(MyRange,MyRange))}
    

    That's it! The cell now contains the number of unique name values in the specified range. This approach is not case-sensitive, so if you have two values that differ only in their capitalization (ThisName vs. THISNAME), they are both counted as a single unique value. In addition, there can be no blank cells in the range. (Having a blank cell returns a #DIV/0 error from the formula.)

    If your particular needs require that your list contain blanks (but you don't want them counted) and you want the evaluation to be case-sensitive, then you must turn to a macro. The following VBA macro, CountUnique, will do the trick:

    Function CountUnique(ByVal MyRange As Range) As Integer
        Dim Cell As Range
        Dim J As Integer
        Dim iNumCells As Integer
        Dim iUVals As Integer
        Dim sUCells() As String
    
        iNumCells = MyRange.Count
        ReDim sUCells(iNumCells) As String
    
        iUVals = 0
        For Each Cell In MyRange
            If Cell.Text > "" Then
                For J = 1 To iUVals
                    If sUCells(J) = Cell.Text Then
                        Exit For
                    End If
                Next J
                If J > iUVals Then
                    iUVals = iUVals + 1
                    sUCells(iUVals) = Cell.Text
                End If
            End If
        Next Cell
        CountUnique = iUVals
    End Function
    

    Simply put an equation similar to the following in a cell:

    =CountUnique(MyRange)
    

    The value returned is the number of unique values, not counting blanks, in the range.

ExcelTips is your source for cost-effective Microsoft Excel training. This tip (2337) applies to Microsoft Excel versions: 97 | 2000 | 2002 | 2003

Make Home Buying Less Stressful! Why make home buying harder than it needs to be? Put your mind at ease—discover all the questions you need to ask to make the best buying decision.
 
Check out Buying a Home Checklist today!