Extraer numero de cadena de texto

Hola. Tengo una cadena de texto y quisiera extraer lo que sea numero .. Intente con extare pero no me sirve porque siempre el numero no va a estar en la misma posición, osea siempre estará al lado derecho pero no en la misma posición. Ej.
alexiscr1
arcoherramientasdb25010
Hubo un experto que me atendio y me dio esta solucion: =DERECHA(E4;1+LARGO(E4)-COINCIDIR(1;(CODIGO(EXTRAE(E4;FILA(INDIRECTO("1:"&LARGO(E4)));1))>47)*(CODIGO(EXTRAE(E4;FILA(INDIRECTO("1:"&LARGO(E4)));1))<58);0))
Pero tengo el problema cuando el texto es así: CASA DEL BOMBILLO No 2 LTDACR224706, a mi no me interesa el 2 del nombre del proveedor solo me interesa el numero de factura que es el que aparece en la parte derecha .. Ademas la fórmula del experto solo me sirve cuando pongo la fórmula a dos celdas de donde esta el texto osea si esta en a y la fórmula la pongo en c pero si la fórmula la pongo por ejemplo en e no me sirve
gracias

1 respuesta

Respuesta
1
Bueno la solución seria programar una función que te buscara todas las coincidencias pero al final tendrías que indicar como quiera algún parámetro para que supiera que es factura y que no debe tomar en cuenta.
Este código funciona con el ejemplo. Básicamente junta la numeración que va encontrando y si la cadena numérica es mayor a un largo de 1 entonces te da la cantidad, las limitantes es que si en la misma cadena encuentra dos o más conjuntos de números.
Function Extrae_Numero(ByVal VCelda As String) As Long
 Dim i As Integer
 Dim vFac As Long
 Dim VAdj As Boolean
 Dim LNum As Variant
 VAdj = False
 For i = Len(VCelda) To 1 Step -1
  LNum = Mid(VCelda, i - 1, 1)
  If IsNumeric(LNum) Then
   VAdj = True
   vFac = LNum & vFac
  ElseIf VAdj = True And Len(vFac) <= 1 Then
   VAdj = False
   vFac = 0
  ElseIf Len(vFac) > 1 Then
   Exit For
  End If 'If IsNumeric(LNum) Then
 Next
 Extrae_Numero = vFac
End Function
Que pena contigo se me olvido aclararte que necesitaba una función que no necesitara macros. Por que no se utilizarlos
Gracias
Dale F11, Insertar modulo, copia y pega el código que te envíe, en funciones del usuario te listara esta función
Ya lo hice.. porque me redondea al numero más cercano osea si es 64 lo que me tiene que dar me da 60, y si es 1 lo que me tiene que dar me da 0, si me tiene que dar 5307 solo me da 530.. espero tu respuesta.. gracias
Pásame un ejemplo de el que te da la numeración para revisar el código
Casa del bombillo No 2 ltda CR224706 me da 2 LTDACR224706
Cambia el código y te debe dar
Option Explicit
Function Extrae_Numero(ByVal VCelda As String) As Long
 Dim i As Integer
 Dim vFac As String
 Dim VAdj As Boolean
 Dim LNum As Variant
 VAdj = False
 For i = Len(VCelda) To 1 Step -1
  LNum = Mid(VCelda, i, 1)
  If IsNumeric(LNum) Then
   VAdj = True
   If Len(VCelda) = i Then
     vFac = LNum
   Else  ' If Len(vFac) > 0 Then
    vFac = LNum & vFac
   End If ' If Len(vFac) > 0 Then
  ElseIf VAdj = True And Len(vFac) <= 1 Then
   VAdj = False
   vFac = 0
  ElseIf Len(vFac) > 1 Then
   Exit For
  End If 'If IsNumeric(LNum) Then
 Next
 Extrae_Numero = vFac
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas