I found doing this manually not too bad. Unfortunately I wasn't able to look at LazyVBA's code because my employer blocks personal blogs.
I did a pivot with the dept. name as first field, customer number as 2nd field, and a count field of customer number that shows how many instances of the customer number.
Copied the pivot values and formatting to a new sheet
Selected all the customer numbers, not including total fields
Looked at the bottom right corner of the screen where Excel shows "Count: (the number of cells selected)". This gives the number of unique values.
For customer names, a pivot with the Last Name, then First Name.
Copied the pivot values to a new sheet
A blank row under a name indicates a second instance of the same name. Deleted these blank rows
Selected the remaining names and looked at the bottom right count.
For the customer number summary I was able to enhance it by using filter on the count field and selecting to see how many customers had 1 visit, 2 visits, 3, etc. Using this method could work on fairly large datasets if you use the CTRL+SHIFT+down arrow to select the column quickly. However, deleting the blank rows from a Last Name First Name report could be cumbersome.
I know this may seem obvious to some of you advanced users, but it wasn't to me on the Monday after 4 days off in a row.

I agree this should be an integral pivot table function. In fact, I assumed it was and had to re-do a report I had already given my boss. It looked like it was counting unique values but it wasn't.
This is reassurance that computers will never take over the world...