Excel - Countdiff with more criteria

Asked By JP Ronse on 12-Dec-09 07:53 AM
Hi All,

I would like to count a sort of diversity per person and per month.

Sample data:

Customer Engineer Date
A JP 01/11/2009
A Bill 01/11/2009
A Bill 01/11/2009
A JP 01/11/2009
B JP 01/11/2009
A JP 01/12/2009
B Bill 01/12/2009
C Bill 01/12/2009
D Bill 01/12/2009
E Bill 01/12/2009


In November, JP has served customers A & B, Bill only for A. The result for
JP is 2 while for Bill, it is 1.

In December: JP=1, Bill = 4.

With {=COUNTDIFF((A2:A11)&(B2:B11))} I am already able to calculate over the
whole range the differing combinations, but how to include the criteria
person and month? Any help will be very appreciated.

With kind regards,

JP




David Biddulph replied to JP Ronse on 12-Dec-09 08:06 AM
Which version of Excel has this COUNTDIFF function, or is it a 3rd part
add-in?
--
David Biddulph
Bernd P replied to JP Ronse on 12-Dec-09 08:55 AM
Hello JP,

If you do not want to use a Pivot Table select a sufficiently long
range with two columns and array-enter
=Pstat("count",TEXT(C1:C999,"YYYYMM")="200912",B1:B999,A1:A999)

Pstat you can find here:
http://sulprobil.com/html/pstat.html

Regards,
Bernd
JP Ronse replied to David Biddulph on 12-Dec-09 08:23 AM
Hi David,

You are right, it is included in MoreFunc for Excel (Morefunc is a freeware
library of 67 new worksheet functions for Excel, created and developped by
Laurent Longre).

So, I better do not use this function if I want to share the workbook with
the colleagues. Good remark.

With kind regards,

JP
JP Ronse replied to Bernd P on 12-Dec-09 08:27 AM
Hi Bernd,

A pivot table is not an option in this project as the figures are for the
management only, the employees are allowed to consult their own figures but
not the ones of their colleagues.

I know that you have written a lot of very useful functions but as most of
the colleagues are Excel dummies, I prefer to work it out with the standard
Excel functions, if possible.

With kind regards,

JP
T. Valko replied to JP Ronse on 12-Dec-09 12:27 PM
You can embed the Morefunc add-in into the file if you are using a version of
Excel prior to Excel 2007. I am not sure about doing it with Excel 2007. That
way, if you distribute the file the recipients do not need to have the add-in
installed on their machine.

Morefunc is one of the better add-ins available so do not let Bernd try to
convince you otherwise.


Try this array formula** ...

Data in the range A2:C11

In the formula:

Cust (customer) refers to Sheet1!$A$2:$A$11
Eng (engineer) refers to Sheet1!$B$2:$B$11
Dates refers to Sheet1!$C$2:$C$11

I am assuming the dates are all within the same year so we are only going to
test the dates for the month.

E2:E3 are the 1st of the month dates 1/11/2009, 1/12/2009
F1:G1 = JP, Bill

Enter this array formula in F2:

=SUM(IF(FREQUENCY(IF(Eng=F$1,IF(MONTH(Dates)=MONTH($E2),MATCH(Cust,Cust,0))),ROW(Cust)-MIN(ROW(Cust))+1),1))

** array formulas need to be entered using the key combination of
CTRL,SHIFT,ENTER (not just ENTER). Hold down both the CTRL key and the SHIFT
key then hit ENTER.

Copy across to G2 then down to F3:G3

Assumes there are no empty cells in the Customer range otherwise you could
get errors.

--
Biff
Microsoft Excel MVP
JP Ronse replied to T. Valko on 13-Dec-09 05:48 AM
Hi,

Your function calculates exactly what I need. Many thanks for your
assistance and your time.

With kind regards,

JP
T. Valko replied to JP Ronse on 13-Dec-09 12:06 PM
You're welcome. Thanks for the feedback!

--
Biff
Microsoft Excel MVP
Harlan Grove replied to T. Valko on 13-Dec-09 10:20 PM
...

Definitely.


If there would be multiple result formulas, it may be better to define
a 4th name BIN referring to the formula =ROW(Cust)-MIN(ROW(Cust))
(omission of +1 intentional). The you could use formulas like

=COUNT(1/FREQUENCY(MATCH(Cust,Cust,0)*(Eng=F$1)*(MONTH(Dates)=MONTH
($E2)),Bin))-1

which does not have to be entered as an array formula [because it
does not call IF, and FREQUENCY always returns an array, so its results
are handled like array constants].
Ron Rosenfeld replied to JP Ronse on 13-Dec-09 10:41 PM
You could present a filtered pivot table to the employees, showing only their
own information.  And also present an unfiltered table to management.
--ron
Bernd P replied to Harlan Grove on 20-Dec-09 05:22 AM
Hello,


Point is: Morefunc can be as fine as anybody wishes for - without a
license
or without open source code you run the risk that it contains a virus
or that
you lose its functionality in future.

That's why most companies' policies are not allowing to use it (or any
of this kind).

JP obviously intends to use his solution in his company.

So let us not suggest to him to use Morefunc without checking his
company's IT policy.

Whether or not you agree to the number 1 of my Excel Don'ts
http://sulprobil.com/html/excel_don_ts.html
is a stronger but different point: What I cannot use in my company I
will not use at all.

Regards,
Bernd
JP Ronse replied to Bernd P on 20-Dec-09 06:58 AM
Hi Bernd,

You have a point with your remark on the company policy. Although not
explicitly forbidden, our IT department will not support it.

Therefore, I used the function that T. Valko suggested.

With kind regards,

JP
Bernd P replied to JP Ronse on 20-Dec-09 09:42 AM
Hello JP,


Ok, since you ticked the first point off, have a look now at the
second one of my Excel Dont's, please:
http://sulprobil.com/html/w-rule.html

Avoid array formulas you (or the majority of your colleagues) do not
understand or which you will fail to maintain later on.

My thesis is that there are brilliant people around here suggesting
nifty (array) formulas. But 95% (hmm, maybe even 99%) of all Excel
users do not fully understand them, and the (array) formulas are not
tackling the right problem space anyway. A huge bulk of the questions
here can and maybe should be reasonably answered with Pivot tables (I
suggest to search for Herbert Seidenberg's Pivot table solutions
here). And another nice part of the challenges can be solved with VBA
macros which encapsulate the functionality so that the casual user can
easily use them (I suggest to have a look at my website). Before you
and normal worksheet functions.

Maybe you are satisfied with Biff's suggestion for now. But I suggest
to put my suggestion into a cell comment next to his formula. I bet
somebody will struggle with the array formula later on.

Kind regards,
Bernd
JP Ronse replied to Harlan Grove on 20-Dec-09 09:38 AM
Hi Harlan,

Is also a nice alternative. Sorry for late reply.

With kind regards,

JP
JP Ronse replied to Bernd P on 20-Dec-09 10:15 AM
Hi Bernd,

I fully agree not use functions you do not understand and will have a closer
look to your website.


With kind regards,

JP
T. Valko replied to Bernd P on 20-Dec-09 12:25 PM
And you run that exact same risk using one of your UDFs.

--
Biff
Microsoft Excel MVP
T. Valko replied to Bernd P on 20-Dec-09 12:41 PM
So, if you do not understand a "complex" array formula what are the chances
that you are going to understand VBA code?


His solution to *everything* is a pt and he only posts solutions for Excel
2007. What about the people that do not use Excel 2007? I guess they are SOL.

--
Biff
Microsoft Excel MVP
Bernd P replied to T. Valko on 20-Dec-09 05:25 PM
Hello Biff,


No. My UDFs are open source, fairly short, and a competent third
person could easily adapt them to any future Excel version, I honestly
believe.


You do not need to understand to program or to maintain them, you need
to know how to use them - that is encapsulation.


Not to *everything*. But have a look at
http://sulprobil.com/html/pfreq.html
(look at the "statistic on engineers" example, please). You can see
that yours and Harlan's approach is about 6x faster than my Pstat
approach for 100 data records. But for 1,000 data records my VBA
approach is already about 5x faster than yours and Harlan's (who is
falling over if there is any empty record, btw). And the approach
which I deem to be state-of-the-art is another 3x faster:
Prepare the data with Pfreq and then apply a Pivot table. You can see
all variants in my sample file(s).

Biff, I like your and Harlan's clever solutions and I think I learned
a lot from both of you. But for many Excel challenges a Pivot table
seems to be a preferrable solution.

Btw: I think its not fair to say that I only post Excel 2007
solutions. I publish my worksheet formulas and my VBA macros which can
be used in earlier versions as well.

Regards,
Bernd
T. Valko replied to Bernd P on 20-Dec-09 11:28 PM
Who said that?

My response was directed at this statement:


*Every* post made by Herbert Seidenberg is a 2007 pt.

I disagree with just about everything you said. You're not going to change
my mind and I am not going to change your mind so....

--
Biff
Microsoft Excel MVP
Bernd P replied to T. Valko on 21-Dec-09 01:25 AM
Hello Biff,

Fair enough.

it is easy for me to watch out for COUNT(1/FREQUENCY()), SUM(...
(FREQUENCY()) or SUMPROUCT(()/COUNTIF()) suggestions and to point out
what Charles already stated some time ago. I cite him at:
http://sulprobil.com/html/count_unique.html

There are no useless posts. They can still serve as a bad example.

Regards,
Bernd
JP Ronse replied to T. Valko on 21-Dec-09 02:40 PM
Hi Biff, Bernd,

Not in my intention to start a discussion overhere.

You are both of great help for Excel users in need.

De gustibus et coloribus, non disputandem est.

(Do not discuss about colours and tastes)

With kind regards,

JP
T. Valko replied to JP Ronse on 21-Dec-09 07:07 PM
Bernd always does this. it is no big deal.

Thanks for your feedback!

--
Biff
Microsoft Excel MVP