Count Text within Multiple Worksheets

G

Guest

I have a workbook with several sheets. I am trying to determine how many
times "x" appears - using a specific cell (A5) as my reference in each of
the sheets. I want to count how many times "x" appears in cell A5 within all
the worksheets and summarize on a summary worksheet. So, if I have 9
worksheets that I want to count, I want to know that "x" appears in only 7 of
the worksheets.
 
G

Guest

Try this UDF:


Function laffin()
Application.Volatile
laffin = 0
For i = 1 To Sheets.Count
If Sheets(i).Name = "summary" Then
Else
If Sheets(i).Range("A5").Value = "x" Then
laffin = laffin + 1
End If
End If
Next
End Function
 
P

Peo Sjoblom

Are the sheets named like name1. name2 and so on? If so use

=SUMPRODUCT(COUNTIF(INDIRECT("'Name"&{1;2;3;4;5;6;7;8;9}&"'!A5"),"x"))

replace Name with whatever name you use for the sheets

however if each name is not in a patter like the above the easiest way is
to put all sheets name in a range, for instance if you put then in H1:H9 in
the summary sheet,

then you can use

=SUMPRODUCT(COUNTIF(INDIRECT("'"&H1:H9&"'!A5"),"x"))


or select H1:H9, do insert>name>define and give it a name like
MySheets, then you can use


=SUMPRODUCT(COUNTIF(INDIRECT("'"&MySheets&"'!A5"),"x"))
 
G

Guest

=SUM(COUNTIF(INDIRECT("Sheet"&ROW(INDIRECT("1:9"))&"!A5"),"x"))

ctrl+shift+enter, not just enter
 
R

Roger Govier

Hi

One way would be to use another cell on each sheet, e.g. cell X1 with a
formula
=IF(A5="x",1,0)

then on your Summary sheet (presumably Sheet10)
=SUM(Sheet1:Sheet9!X1)
You could insert 2 dummy sheets, and name them First and Last.
Drag them to positions where they encompass your 9 sheets in a sort of
"sandwich", with your summary sheet being outside of the sandwich.
Then
=SUM(First:Last!X1)

You can then drag sheets in and out of the sandwich to make the count
only operational on some of your sheets if you wish.
 
G

Guest

Your recommendation of putting the sheet names in a range of cells worked for
me. Thank you so much for that. However, since most of my sheets will not
likely have a pattern, if I only had two sheets I wanted to use and the names
were 43-03951804 and 80-06069282, how would I write the formula without
putting them in a range?
 
P

Peo Sjoblom

If you only have 2 sheets you can hardcode the name into the formula like
this

=SUMPRODUCT(COUNTIF(INDIRECT("'"&{"43-03951804";"80-06069282"}&"'!A5"),"x"))


obviously if you had 30 sheets the formula would get out of hand hardcoded
 
G

Guest

Perfect! Thank you so much!

Peo Sjoblom said:
If you only have 2 sheets you can hardcode the name into the formula like
this

=SUMPRODUCT(COUNTIF(INDIRECT("'"&{"43-03951804";"80-06069282"}&"'!A5"),"x"))


obviously if you had 30 sheets the formula would get out of hand hardcoded
 
H

Harlan Grove

Gary''s Student said:
Try this UDF:

Function laffin()
....

No arguments - usually a bad sign.
For i = 1 To Sheets.Count
If Sheets(i).Name = "summary" Then

Next bad sign - using hardcoded worksheet names.
Else
If Sheets(i).Range("A5").Value = "x" Then
....

Next bad sign - using hardcoded cell references.

There are better ways to write such a udf, and there are already
several dozen in the newsgroup archive, so I won't add another.

But udfs are slow. How about an .XLL add-in? Specifically, Laurent
Longre's MOREFUNC.XLL add-in, available at

http://xcell05.free.fr/english/

Once it's installed try

=SUMPRODUCT(--(THREED(alpha:blush:mega!A5)="x"))
 
T

T. Valko

If you only have 2 sheets involved:

=COUNTIF('43-03951804'!A5,"x")+COUNTIF('80-06069282'!A5,"x")

Biff
 
G

Guest

If I wanted to insert two dummy sheets at the first and last of my worksheets
(called First and Last). I tried the following formula:

=SUMPRODUCT(COUNTIF(INDIRECT("'"&First:Last&"'!F16"),"x"))

and got this error (#NAME?). I would like to be able to just insert sheets
like this if possible as I will be receiving the worksheets via email and
just need to summarize specific fields.
 

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