InStr function that counts all the numbers in a cell that fall within a specified range

I have cells with values like: 19A, 20B, 26B,7C,20B,35D,14C, 21A,25C,26B,31A,17B  and i need a macro that tells me how many occurrences there are of numbers between 20 and 25.

I could split the strings into separate cells, and then create a helper row that strips out the letters. and use this:
[DQ3] = WorksheetFunction.CountIf([DR5:EH5], ">19") - WorksheetFunction.CountIf([DR5:EH5], ">25")

but I really need to do it as an InStr without going trough all that.

John CarneyReliability Business Tools Analyst IIAsked:
Who is Participating?
m4trixConnect With a Mentor Commented:
Something like this?
Michael FowlerSolutions ConsultantCommented:
This formula will do what you want

=SUM(COUNTIF(A1:A2, "*19*"),COUNTIF(A1:A2, "*20*"),COUNTIF(A1:A2, "*21*"),COUNTIF(A1:A2, "*22*"),COUNTIF(A1:A2, "*23*"),COUNTIF(A1:A2, "*24*"),COUNTIF(A1:A2, "*25*"))

The trick here is the use of the wildcard * in the countif condition

Michael FowlerSolutions ConsultantCommented:
Sorry forgot to change the range in my formula. Here it is with the correct range input

=SUM(COUNTIF(DR5:EH5, "*19*"),COUNTIF(DR5:EH5, "*20*"),COUNTIF(DR5:EH5, "*21*"),COUNTIF(DR5:EH5, "*22*"),COUNTIF(DR5:EH5, "*23*"),COUNTIF(DR5:EH5, "*24*"),COUNTIF(DR5:EH5, "*25*"))

Cloud Class® Course: Amazon Web Services - Basic

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

John CarneyReliability Business Tools Analyst IIAuthor Commented:
Michael, thanks for the formulas but the number ranges are dynamic and sometimes very large so this probably won't work very well for me.

m4trix, your function is awesomely simple, and I was able to make a dynamic macro out of it which i will post here tomorrow if you're interested.

Thanks, and sure, post away! Perhaps someone down the road will find it helpful
John CarneyReliability Business Tools Analyst IIAuthor Commented:
Here ya go. Thanks again.

- John
    Dim cel As Range, lft As Range, rgt As Range, rng As Range
    For Each cel In [AllY]
        Set lft = cells(cel.Row, [DR1].Column)
        Set rgt = lft.End(xlToRight)
        If lft = "" Then GoTo here
            If lft.Offset(0, 1) = "" Then
            Set rng = lft
            Set rng = Range(lft, rgt)
            End If
        cel = countValues(rng, cells(cel.Row, [Y_Lo].Column), cells(cel.Row, [Y_Hi].Column))
    Next cel
End Sub

Open in new window

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.