string - ¿Cómo encontrar números de una cadena?
excel vba (5)
Necesito encontrar números de una string
. ¿Cómo se encuentran los números de una string
en VBA Excel?
Ampliando la respuesta de brettdj, para analizar dígitos incrustados en números separados:
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
Esta es una variante de la publicación de brettdj''s y pstraton.
¡Esto devolverá un verdadero valor y no le dará el #NUM!
error. Y /D
es una abreviatura de todo menos dígitos. El resto es muy parecido a los demás solo con esta solución menor.
Function StripChar(Txt As String) As Variant
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "/D"
StripChar = Val(.Replace(Txt, " "))
End With
End Function
Las expresiones regulares se construyen para analizar. Si bien la sintaxis puede tardar un tiempo en adoptar este enfoque es muy eficiente y muy flexible para manejar extracciones / reemplazos de cadenas más complejas.
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
Suponiendo que quiere decir que quiere que se eliminen los no números, debería poder usar algo como:
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
Llamando a esto con:
Dim myStr as String
myStr = onlyDigits ("3d1fgd4g1dg5d9gdg")
MsgBox (myStr)
le dará un cuadro de diálogo que contiene:
314159
y esas dos primeras líneas muestran cómo puede almacenarlo en una variable de cadena arbitraria, para hacer lo que desee.
Use la función de VBA incorporada Val, si los números están en el extremo delantero de la cadena:
Dim str as String
Dim lng as Long
str = "1 149 xyz"
lng = Val(str)
lng = 1149