Convertir a Numero desde VBA
Como puedo convertir los datos a Números, me explico, supóngase que por alguna razón descargo un archivo de texto a excel, el numero no es un numero sino texto.
Primero: supuestos caracter decimal el punto
A1: 12.234.345,34 el numero correcto seria 12,234,345.34 o 12234345.34
A2: 12,234 el numero correcto seria 12.234
En otra maquina puedo tener la siguiente situación:
A1: 12,234,345.34 el numero correcto seria 12.234.345,34 o 12234345,34
A2: 12,234 el numero correcto seria 12,234
como puedo construir una función que me ayude a convertir el numero que esta como texto a Numero independiente del carácter decimal que se este manejando, en pocas palabras que me haga la ssutitucion dependiendo del carácter decimal que este manejando el excel. En buena teoría esta función me servía solo que el algunos casos en donde el carácter decimal coincidía con el numero solo que había espacios en blanco delante del numero la función no me funciona.
Public Function Cambio_A_Num_II(ByVal pNum As String) As String
Dim sOrden As String, sCarac As String, sCaracContra As String
pNum = VBA.Trim(pNum)
If pNum = "" Then
pNum = 0
Else
sCarac = Application.International(Excel.xlDecimalSeparator)
sOrden = IIf(sCarac = ".", ".,", ",.")
sCaracContra = IIf(sCarac = ".", ",", ".") 'sCarac)
Dim sSort As String, nCan As Integer
If Habe_Punt_Coma(pNum, sCarac, sSort, nCan) Then
Dim sLetra As String, i As Byte
For i = 1 To 2
sLetra = VBA.Mid(sOrden, i, 1)
If i = 1 Then pNum = VBA.Replace(pNum, sLetra, "")
If i = 2 Then pNum = VBA.Replace(pNum, sLetra, sCarac)
Next i
Else
If sCarac = sSort Then
If nCan > 1 Then
pNum = VBA.Replace(pNum, sCarac, "")
Else
pNum = pNum
End If
'pNum = pNum
Else
Select Case sSort
Case "."
If nCan > 1 Then
pNum = VBA.Replace(pNum, sCarac, "")
Else
If nCan = 0 Then
pNum = VBA.Replace(pNum, ".", sCarac)
End If
End If
Case ","
'If nCan > 1 Then
pNum = VBA.Replace(pNum, sCaracContra, "")
'End If
End Select
End If
End If
End If
'MsgBox VBA.CDbl(pNum)
'Debug.Print VBA.FormatNumber(pNum, 2)
Cambio_A_Num_II = pNum
End Function
Primero: supuestos caracter decimal el punto
A1: 12.234.345,34 el numero correcto seria 12,234,345.34 o 12234345.34
A2: 12,234 el numero correcto seria 12.234
En otra maquina puedo tener la siguiente situación:
A1: 12,234,345.34 el numero correcto seria 12.234.345,34 o 12234345,34
A2: 12,234 el numero correcto seria 12,234
como puedo construir una función que me ayude a convertir el numero que esta como texto a Numero independiente del carácter decimal que se este manejando, en pocas palabras que me haga la ssutitucion dependiendo del carácter decimal que este manejando el excel. En buena teoría esta función me servía solo que el algunos casos en donde el carácter decimal coincidía con el numero solo que había espacios en blanco delante del numero la función no me funciona.
Public Function Cambio_A_Num_II(ByVal pNum As String) As String
Dim sOrden As String, sCarac As String, sCaracContra As String
pNum = VBA.Trim(pNum)
If pNum = "" Then
pNum = 0
Else
sCarac = Application.International(Excel.xlDecimalSeparator)
sOrden = IIf(sCarac = ".", ".,", ",.")
sCaracContra = IIf(sCarac = ".", ",", ".") 'sCarac)
Dim sSort As String, nCan As Integer
If Habe_Punt_Coma(pNum, sCarac, sSort, nCan) Then
Dim sLetra As String, i As Byte
For i = 1 To 2
sLetra = VBA.Mid(sOrden, i, 1)
If i = 1 Then pNum = VBA.Replace(pNum, sLetra, "")
If i = 2 Then pNum = VBA.Replace(pNum, sLetra, sCarac)
Next i
Else
If sCarac = sSort Then
If nCan > 1 Then
pNum = VBA.Replace(pNum, sCarac, "")
Else
pNum = pNum
End If
'pNum = pNum
Else
Select Case sSort
Case "."
If nCan > 1 Then
pNum = VBA.Replace(pNum, sCarac, "")
Else
If nCan = 0 Then
pNum = VBA.Replace(pNum, ".", sCarac)
End If
End If
Case ","
'If nCan > 1 Then
pNum = VBA.Replace(pNum, sCaracContra, "")
'End If
End Select
End If
End If
End If
'MsgBox VBA.CDbl(pNum)
'Debug.Print VBA.FormatNumber(pNum, 2)
Cambio_A_Num_II = pNum
End Function
1 Respuesta
Respuesta de mrtool
1