Mejorar la función creada LIMPIA

Tengo una función para separar textos de números o números de textos de una celda en Excel mediante una fórmula, se trata de una función personalizada (macro) denominada =limpia() la cual hace sencillo el trabajo de separar teniendo en cuenta tres criterios, el tipo 1 separa o extrae solo los números, el tipo 2 separa o extrae todos los caracteres excepto los números y el tipo 3 extrae solo números, de esta forma nos permite efectuar separaciones de acuerdo al criterio que utilicemos, la función tiene estos argumentos =limpia(celda a separar, tipo).

El problema radica que cuando la utiliza para que solo me traiga los números necesito que también me traiga el punto "." para que me de el monto correcto.

Por favor ayudarme a mejorar la macro/funcion

Esta es la macro/funcion

Function LIMPIA(cadena As String, Optional num_car_az As Byte = 1)  
Dim pat As String  
Select Case num_car_az    
Case 2: pat = "[0-9]"    
Case 3: pat = "[^a-z|ñ]"    
Case Else: pat = "[^0-9]"  
End Select  
With CreateObject("vbscript.regexp")    
.Global = True    
.IgnoreCase = True    
.Pattern = pat    
Limpia = .Replace(cadena, "")  
End With  
If num_car_az = 1 Then 
Limpia = CLng(Limpia)
end if
End Function
2

2 Respuestas

237.500 pts. Programador - Administrador

[Hola

Cambia esta línea:

Case Else: pat = "[^0-9-.]"

Pero, OJO, te será útil para sistemas operativos que usen el "punto" como separador de miles, si lo llevas a uno que use la "coma", no te será útil. Quizá sea mejor usar una variable tipo:

Dim Separador As String
Separador = Application.International(xlThousandsSeparator)

Pero ya esa es tu decisión.

Saludos]

Abraham Valencia


Excelente pero el resultado me lo pasa como Texto y quiero que lo pase como numero, como puedo terminar de corregir esto.

¿Cuál es el "separador de miles" de tu sistema operativo? Verifica eso por favor y ¿tu Excel está configurado para usar los mismo u otros?

Abraham Valencia

4.583.925 pts. Sancho, si los perros ladran ...

Cambia esta línea

Case Else: pat = "[^0-9]"

Por esta 

Case Else: pat = "[^0-9|.]"

Y además, Cambia esta línea

Limpia = CLng(Limpia)

Por esta:

LIMPIA = LIMPIA

O también puedes eliminar estas 3 líneas:

    If num_car_az = 1 Then
        LIMPIA = LIMPIA
    End If

sal u dos

Excelente pero el resultado me lo pasa como Texto y quiero que lo pase como numero, como puedo terminar de corregir esto.

Entonces cambia

Limpia = CLng(Limpia)

Por

LIMPIA = CDbl(LIMPIA)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas