Count Unique Values in a entire column, not just range

B

Brian

Howdy All,

I have a formula:

=Sum(IF(Frequency(Match(A1:A14000,A1:A14000,0),Match(A1:A14000,A1:A14000,0))>0,1))

Which will give me a count if the unique values in the in column A, Rows 1
through 14000.

What I need is a formula I can use to count the unique values in and entire
Column, A:A. The above formula does not seem to allow that.

Any ideas are greatly appreciated.

Thanks,
Brian
 
R

RagDyer

How about just leaving out 1 row?

=SUMPRODUCT((A2:A65536<>"")/COUNTIF(A2:A65536,A2:A65536&""))
 
R

RagDyer

How about just leaving out 1 row?

=SUMPRODUCT((A2:A65536<>"")/COUNTIF(A2:A65536,A2:A65536&""))
 
T

T. Valko

What version of Excel are you using?

For an entire column, (65,536 or 1,048,576 rows) using Excel's built-in
functions are pretty much out of the question. My machine locks up when I
try this on more than 50,000 rows of data.

Download and install the free Morefunc.xll add-in from:

http://xcell05.free.fr/morefunc/english/index.htm

Alternative download site:

http://www.download.com/Morefunc/3000-2077_4-10423159.html

Then use the COUNTDIFF function. However, this function won't accept an
entire column as a range reference. So, you'd have to set the range to one
less cell:

A1:A65535
A2:A65536

Also, see the help on COUNTDIFF since it has a few options as to
exclusions.

This function calculates very fast compared to a formula using buit-in
functions.
 
T

T. Valko

What version of Excel are you using?

For an entire column, (65,536 or 1,048,576 rows) using Excel's built-in
functions are pretty much out of the question. My machine locks up when I
try this on more than 50,000 rows of data.

Download and install the free Morefunc.xll add-in from:

http://xcell05.free.fr/morefunc/english/index.htm

Alternative download site:

http://www.download.com/Morefunc/3000-2077_4-10423159.html

Then use the COUNTDIFF function. However, this function won't accept an
entire column as a range reference. So, you'd have to set the range to one
less cell:

A1:A65535
A2:A65536

Also, see the help on COUNTDIFF since it has a few options as to
exclusions.

This function calculates very fast compared to a formula using buit-in
functions.
 
T

T. Valko

If the OP wants the most efficient method they *should* use the Morefunc
add-in. Not only is it the most efficient method you also get a library of
useful functions.

I tested the COUNTU function against the COUNTDIFF function (using Charles
Williams RangeTimer method).

Filled A2:A65536 with =ROW(). 65,535 unique entries. Average calculation
time (5 calculations):

COUNTU(A2:A65536) = 1.42 secs
COUNTDIFF(A2:A65536) = 0.04 secs

Filled A2:A65536 with random numbers from 0 to 100. 101 unique entries.
Average calculation time (5 calculations):

COUNTU(A2:A65536) = 0.38 secs
COUNTDIFF(A2:A65536) = 0.07 secs
 
T

T. Valko

If the OP wants the most efficient method they *should* use the Morefunc
add-in. Not only is it the most efficient method you also get a library of
useful functions.

I tested the COUNTU function against the COUNTDIFF function (using Charles
Williams RangeTimer method).

Filled A2:A65536 with =ROW(). 65,535 unique entries. Average calculation
time (5 calculations):

COUNTU(A2:A65536) = 1.42 secs
COUNTDIFF(A2:A65536) = 0.04 secs

Filled A2:A65536 with random numbers from 0 to 100. 101 unique entries.
Average calculation time (5 calculations):

COUNTU(A2:A65536) = 0.38 secs
COUNTDIFF(A2:A65536) = 0.07 secs
 
B

Brian

Thanks to All.

I've load the CountU and I am using that one.
The reason I choose it was because I have to distribute the workbook and not
everyone will have the MoreFunc add-in.

Thanks again,
Brian
 
B

Brian

Thanks to All.

I've load the CountU and I am using that one.
The reason I choose it was because I have to distribute the workbook and not
everyone will have the MoreFunc add-in.

Thanks again,
Brian
 
D

Domenic

The reason I choose it was because I have to distribute the workbook and not
everyone will have the MoreFunc add-in.

Actually, the add-in has an option where it allows one to embed it
within the workbook. So other's don't need to install on their
computer. Note, however, it's not compatible with Mac computers.
 
D

Domenic

The reason I choose it was because I have to distribute the workbook and not
everyone will have the MoreFunc add-in.

Actually, the add-in has an option where it allows one to embed it
within the workbook. So other's don't need to install on their
computer. Note, however, it's not compatible with Mac computers.
 
D

Domenic

In addition, it doesn't look like COUNTU accepts a conditional
statement, such as...

=COUNTU(IF(A2:A100="X",B2:B100))

It returns #VALUE! Or is this because the VBA code is not compatible
with my Mac computer?
 
D

Domenic

In addition, it doesn't look like COUNTU accepts a conditional
statement, such as...

=COUNTU(IF(A2:A100="X",B2:B100))

It returns #VALUE! Or is this because the VBA code is not compatible
with my Mac computer?
 
T

T. Valko

It returns #VALUE! Or is this because the VBA code
is not compatible with my Mac computer?

Nope, only takes a range argument.

COUNTDIFF will take conditionals.

Array entered:

=COUNTDIFF(IF(B2:B65536=2008,A2:A65536),FALSE,FALSE)

Didn't time this but the "eyeball test" says it's still very fast.
 
T

T. Valko

It returns #VALUE! Or is this because the VBA code
is not compatible with my Mac computer?

Nope, only takes a range argument.

COUNTDIFF will take conditionals.

Array entered:

=COUNTDIFF(IF(B2:B65536=2008,A2:A65536),FALSE,FALSE)

Didn't time this but the "eyeball test" says it's still very fast.
 
D

Domenic

Nope, only takes a range argument.

That's great, thanks Biff!

--
Domenic
http://www.xl-central.com


It returns #VALUE! Or is this because the VBA code
is not compatible with my Mac computer?

Nope, only takes a range argument.

COUNTDIFF will take conditionals.

Array entered:

=COUNTDIFF(IF(B2:B65536=2008,A2:A65536),FALSE,FALSE)

Didn't time this but the "eyeball test" says it's still very fast.


--
Biff
Microsoft Excel MVP


Domenic said:
In addition, it doesn't look like COUNTU accepts a conditional
statement, such as...

=COUNTU(IF(A2:A100="X",B2:B100))

It returns #VALUE! Or is this because the VBA code is not compatible
with my Mac computer?
[/QUOTE]
 
D

Domenic

Nope, only takes a range argument.

That's great, thanks Biff!

--
Domenic
http://www.xl-central.com


It returns #VALUE! Or is this because the VBA code
is not compatible with my Mac computer?

Nope, only takes a range argument.

COUNTDIFF will take conditionals.

Array entered:

=COUNTDIFF(IF(B2:B65536=2008,A2:A65536),FALSE,FALSE)

Didn't time this but the "eyeball test" says it's still very fast.


--
Biff
Microsoft Excel MVP


Domenic said:
In addition, it doesn't look like COUNTU accepts a conditional
statement, such as...

=COUNTU(IF(A2:A100="X",B2:B100))

It returns #VALUE! Or is this because the VBA code is not compatible
with my Mac computer?
[/QUOTE]
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top