J'ai besoin de trouver des nombres à partir d'une string
. Comment trouve-t-on des nombres à partir d'une string
dans VBA Excel?
En supposant que vous vouliez dire que vous vouliez éliminer les non-nombres, vous devriez pouvoir utiliser quelque chose comme:
Function onlyDigits(s As String) As String
' Variables needed (remember to use "option explicit"). '
Dim retval As String ' This is the return string. '
Dim i As Integer ' Counter for character position. '
' Initialise return string to empty '
retval = ""
' For every character in input string, copy digits to '
' return string. '
For i = 1 To Len(s)
If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then
retval = retval + Mid(s, i, 1)
End If
Next
' Then return the return string. '
onlyDigits = retval
End Function
Appeler cela avec:
Dim myStr as String
myStr = onlyDigits ("3d1fgd4g1dg5d9gdg")
MsgBox (myStr)
vous donnera une boîte de dialogue contenant:
314159
et ces deux premières lignes montrent comment vous pouvez le stocker dans une variable chaîne arbitraire, à faire avec ce que vous voulez.
Les expressions régulières sont construites pour analyser. Bien que la syntaxe prenne un certain temps à comprendre cette approche est très efficace et très flexible pour gérer des extractions/remplacements de chaînes plus complexes
Sub Tester()
MsgBox CleanString("3d1fgd4g1dg5d9gdg")
End Sub
Function CleanString(strIn As String) As String
Dim objRegex
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "[^\d]+"
CleanString = .Replace(strIn, vbNullString)
End With
End Function
Développer la réponse de brettdj, afin d'analyser les chiffres incorporés disjoints en nombres séparés:
Sub TestNumList()
Dim NumList As Variant 'Array
NumList = GetNums("34d1fgd43g1 dg5d999gdg2076")
Dim i As Integer
For i = LBound(NumList) To UBound(NumList)
MsgBox i + 1 & ": " & NumList(i)
Next i
End Sub
Function GetNums(ByVal strIn As String) As Variant 'Array of numeric strings
Dim RegExpObj As Object
Dim NumStr As String
Set RegExpObj = CreateObject("vbscript.regexp")
With RegExpObj
.Global = True
.Pattern = "[^\d]+"
NumStr = .Replace(strIn, " ")
End With
GetNums = Split(Trim(NumStr), " ")
End Function
Utilisez la fonction intégrée VBA Val, si les nombres sont au début de la chaîne:
Dim str as String
Dim lng as Long
str = "1 149 xyz"
lng = Val(str)
lng = 1149
Ceci est une variante du post de brettdj & pstraton.
Cela renverra une valeur vraie et ne vous donnera pas l'erreur #NUM!
. Et \D
est un raccourci pour autre chose que des chiffres. Le reste ne ressemble beaucoup aux autres qu’avec cette solution mineure.
Function StripChar(Txt As String) As Variant
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\D"
StripChar = Val(.Replace(Txt, " "))
End With
End Function