Saltar al contenido

Convertir texto a formato de números


Recommended Posts

publicado

Hola a todos los del foro

Requiero un favor de ustedes, con un macro que me convierta el dato de la columna D de la hoja TXT a número con dos decimales. Los números de esta columna todos ninguno tiene separador de decimales pero todos los últimos dos valores son decimales.

macro.xlsm

Ejemplo 

 D2 = "60225700 debe ser 602,257.00"

D3 = "16123300 debe ser 161,233.00"

de antemano muchas gracias y espero alguno me pueda ayudar.

 

publicado
=TEXTO(VALOR(D2)*0.01,"0.00")

Una propuesta con fórmula por si es de interés, solo cambiar la coma por el punto y coma, de acuerdo a tu separador de argumentos.

Captura.jpg

 

Saludines_2

publicado

Hola.

Lamento que no puse atención a que necesitas el separador de miles.

Solo agrega la coma en el formato de VBA

        celda.NumberFormat = "#,##0.00"

O en la fórmula si lo requieres.

=TEXTO(VALOR(D2)*0.01,"#,##0.00")

 

publicado

Muchas gracias por el macro, un último favor con los valores que están en cero como puedo hacer para que también los cambie a formato número.

publicado

De acuerdo, si te interesan esos "0" cambia la sentencia por esta:

Sub convertirTextoANumerosDecimales()
    Dim celda As Range
    For Each celda In Range("D2:D" & Cells(Rows.Count, "D").End(xlUp).Row)
        If Len(celda.Value) >= 2 And IsNumeric(celda.Value) Then
            celda.Value = CDbl(Left(celda.Value, Len(celda.Value) - 2) & "." & Right(celda.Value, 2))
            celda.NumberFormat = "###0.00"
        ElseIf celda.Value = "0" Then
            celda.Value = 0
            celda.NumberFormat = "0.00"
        End If
    Next celda
End Sub

Saludines_3

publicado

Hola  a ambos dejo otra posible solución que contempla también tu nuevo requerimiento.

Private Sub CommandButton1_Click(): Application.ScreenUpdating = False
 With Hoja2
        For x = 2 To .Range("D" & Rows.Count).End(xlUp).Row
            longitud = Len(Range("D" & x))
            If longitud > 1 Then
                .Range("D" & x) = Left(.Range("D" & x), longitud - 2) & "." & Right(.Range("D" & x), 2)
                .Range("D" & x) = .Range("D" & x) + 0
                .Range("D" & x).NumberFormat = "#,##0.00"
            Else
                .Range("D" & x) = .Range("D" & x) + 0
                .Range("D" & x).NumberFormat = "#,##0.00"
            End If
        Next x
    End With
End Sub

 

image.gif

publicado

Hola @JSDJSD

Excelente propuesta también. Aprovechando que andas también conectado y cambiando de tema con esta consulta, voy a subir una propuesta a otra consulta del foro:

asignacion-de-lotes-automaticamente

La estuve leyendo y por fórmulas cae en una referencia circular y le voy a recomendar al consultante una sentencia de VBA, tal vez si en un tiempo que tengas tienes alguna idea diferente. Esta curiosa la consulta, será divertido.

Voy para allá a escribir.

Saludines

publicado
hace 21 minutos , Israel Cassales dijo:

voy a subir una propuesta a otra consulta del foro:

Perfecto, pero lo veo mañana hoy ya no puedo, un saludo

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.