Extraer monto $ de una cadena de textos

Tengo una celda "C5" la cual posee dos modelos de textos, por ejemplo:

.- Ha enviado $4,776.50 a JHONATHAN

.- Enzo Morrone Garcia le envió $2,474.35

En ambos ejemplo debo solo extraer los montos a una celda "X", a celda "C7", para luego realizar un estado de cuenta. (Celdas solo ejemplo para luego adaptar al programa que estoy realizando)

Intente ubicando el caracter "$" y extrayendo N cantidad de caracteres siguientes, funciona perfecto para el 2do Ejemplo, pero para el primero no me funciona ya que al ser variables los montos y extraer N cantidad de caracteres, me traería parte del nombre, o como el 1er ejemplo " a JHO" si excede el numero de caracteres.

Pregunta concisa: ¿Cómo hacer para en cualquiera de los dos casos extraer solo el monto indiferentemente que sea monto variable?

- Pense en si se puede realizar un conteo de espacios en blancos donde copie desde el 2do hasta el 3ero (primer caso) o desde el 5to hasta el final (ESTOS DOS CASOS SON ESTANDARES, SIEMPRE ES EL MISMO FORMATO, solo cambiaría el nombre de la persona y el monto, pero en el segundo caso no funcionaria por variacion de nombres y apellidos cantidades)

- Ubicar el caracter "$" y que copie el largo de la "palabra", hasta el siguiente espacio en blanco

Realice un conteo de solo números en la celda y divido entre entero y decimal, perfecto, pero si el nombre posee algún numero me daría un falso monto ya que me traería ese numero ubicado en el nombre (ya lo probé y efectivamente es así)

Sub Botón1_Haga_clic_en()
Dim numeros As String
Dim coma As String
Dim entero As String

numeros = ""
cadena = Range("C5")
'Recorrer la cadena
For i = 1 To Len(cadena)
'Evaluar SI el carácter actual es un número
If IsNumeric(Mid(cadena, i, 1)) Then
'Concatenar valor numérico a la variable numeros
numeros = numeros & Mid(cadena, i, 1)
End If
Next
entero = Left(numeros, Len(numeros) - 2)
coma = Right(numeros, 2)
Range("C7").Value = entero & "." & coma

End Sub

Con este código extraigo los números y luego separo en enteros y decimales, pero como le comento si el nombre posee algún numero, también es mostrado y ya la operación no me es funcional.

Quedo a la espera de su ayuda y super agradecido de antemano.

Jose Perez

Respuesta
1

[Ho la y bienvenido a TodoExpertos!

Te invito a SUSCRIBIRTE a mi canal de YouTube:

Excel y Macros

Ahí encontrarás más sobre Excel y Macros:

https://www.youtube.com/channel/UCs644-v3ti4SF7zE_bt_YXA 

Comparte los enlaces con alguien más que desee conocer sobre Excel o Macros.


Utiliza la siguiente fórmula

=IZQUIERDA(SUSTITUIR(EXTRAE(C5,HALLAR("$",C5),99)," ",REPETIR(" ",99)),99)+0

Nota: Cambia en la fórmula las comas ( , ) por punto y coma ( ; ) si lo utilizas como separador de argumentos.

Ejemplos:


sal u dos

Agradecido Dante por tu pronta respuesta, tu función se ejecuta perfectamente, pero necesito colocarlo en una macro vba, codificarlo ya que viene luego de otras funciones de mi macro.

pudiéramos presentarla para macro? te lo agradecería, porque hasta donde mi capacidad llega no logro dar con un código que me lo ejecute.

Saludos y nuevamente agradecido

Si ejecutas la grabadora de macros con la fórmula que te puse, te genera algo como esto:

Sub Macro1()
'
' Macro1 Macro
'
ActiveCell.FormulaR1C1 = _
"=LEFT(SUBSTITUTE(MID(RC[-1],SEARCH(""$"",RC[-1]),99),"" "",REPT("" "",99)),99)+0"
Range("D6").Select
End Sub

Tomas el código y lo pones de esta manera:

Sub extraer_monto()
Range("C7").Value = Evaluate("=LEFT(SUBSTITUTE(MID(C5,SEARCH(""$"",C5),99),"" "",REPT("" "",99)),99)+0")
End Sub

Analiza cómo utilizo el código y la fórmula para ponerlas dentro de la instrucción Evaluate, practicando y haciendo ejercicios lo puedes lograr.

-----

Comparte los enlaces con alguien más que desee conocer sobre Excel o Macros.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas