• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 708
  • Last Modified:

Count numbers in string using VB 6.0

Hello,

I need to count the number character in a string using vb 6.0/vba.  For example

NumberCount("%1.2%) = 2

NumbeCount("%8dsf%") = 1

Any ideas?
0
eshurak
Asked:
eshurak
2 Solutions
 
tlovieCommented:
Maybe this would work:

function NumberCount( s as string ) as long

dim q as string, c as long
q=s
c=0

while c<=9
   q=replace(q, cstr(c),"")
   c=c+1
wend

NumberCount=len(s)-len(q)

end function
0
 
Patrick MatthewsCommented:
Add the function below to your project, and use it like this:InputString = "1qw23rt45y6"Debug.Print "There are " & Len(RegExpReplace(InputString, "\D")) & " digits in the string"For more info on the function below, please see my article http://www.experts-exchange.com/Programming/Languages/Visual_Basic/A_1336-Using-Regular-Expressions-in-Visual-Basic-for-Applications-and-Visual-Basic-6.html
Function RegExpReplace(LookIn As String, PatternStr As String, Optional ReplaceWith As String = "", _
    Optional ReplaceAll As Boolean = True, Optional MatchCase As Boolean = True, _
    Optional MultiLine As Boolean = False)
    
    ' Function written by Patrick G. Matthews.  You may use and distribute this code freely,
    ' as long as you properly credit and attribute authorship and the URL of where you
    ' found the code
    
    ' For more info, please see:
    ' http://www.experts-exchange.com/articles/Programming/Languages/Visual_Basic/Using-Regular-Expressions-in-Visual-Basic-for-Applications-and-Visual-Basic-6.html
    
    ' This function relies on the VBScript version of Regular Expressions, and thus some of
    ' the functionality available in Perl and/or .Net may not be available.  The full extent
    ' of what functionality will be available on any given computer is based on which version
    ' of the VBScript runtime is installed on that computer
    
    ' This function uses Regular Expressions to parse a string, and replace parts of the string
    ' matching the specified pattern with another string.  The optional argument ReplaceAll
    ' controls whether all instances of the matched string are replaced (True) or just the first
    ' instance (False)
    
    ' If you need to replace the Nth match, or a range of matches, then use RegExpReplaceRange
    ' instead
    
    ' By default, RegExp is case-sensitive in pattern-matching.  To keep this, omit MatchCase or
    ' set it to True
    
    ' If you use this function from Excel, you may substitute range references for all the arguments
    
    ' Normally as an object variable I would set the RegX variable to Nothing; however, in cases
    ' where a large number of calls to this function are made, making RegX a static variable that
    ' preserves its state in between calls significantly improves performance
    
    Static RegX As Object
    
    If RegX Is Nothing Then Set RegX = CreateObject("VBScript.RegExp")
    With RegX
        .Pattern = PatternStr
        .Global = ReplaceAll
        .IgnoreCase = Not MatchCase
        .MultiLine = MultiLine
    End With
    
    RegExpReplace = RegX.Replace(LookIn, ReplaceWith)
    
End Function

Open in new window

0
 
fabriciofonsecaCommented:

Public Function NumberCount(ByVal Str As String) As Integer

    Dim Numbers As String
    Dim i As Integer
    Dim TotalNumbers As Integer
   
    Numbers = "0123456789"
    TotalNumbers = 0
    i = 1
   
    While i <= Len(Str)
        If InStr(Numbers, Mid(Str, i, 1)) > 0 Then TotalNumbers = TotalNumbers + 1
        i = i + 1
    Wend
    NumberCount = TotalNumbers

End Function
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
VBClassicGuyCommented:
Or use a simple old fashioned way:
Function NumberCount (txt As String) As Long
   Dim i As Long, c As Integer, cnt As Long
   For i = 1 to len(txt)
      c = Asc(Mid$(txt,i,1)
      If c > 47 And c < 58 Then
         cnt = cnt + 1
      End If
   Next i
   NumberCount = cnt
End Function
0
 
eshurakAuthor Commented:
Thanks Guys,

I'm gonna go with my code below, but it's inspired by some of the solutions above.
Function NumberCount(theString As String) As Long
Dim i As Long
    For i = 1 To Len(theString)
        If IsNumeric(Mid(theString, i, 1)) Then NumberCount = NumberCount + 1
    Next i
End Function

Open in new window

0
 
NorieVBA ExpertCommented:
Just out of curiosity what happens with numbers with more than one digit?

Or is it actually digits you want to count?
0
 
eshurakAuthor Commented:
Imnorie, it's the actual number of digits.
0
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.

Join & Write a Comment

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now