string excel vba excel-vba

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

Función Val, en MSDN