martes, 8 de mayo de 2012

Conversión de texto a número en Excel

A veces, cuando se obtienen datos de fuentes externas, tales como bases de datos o ficheros, los números pueden ser traídos como textos, lo que puede hacer fallar o no funcionar fórmulas de cálculo.

El siguiente truco permite convertir automáticamente un rango predefinido de celdas a formato numérico. Baste decir que se ha realizado en Excel 2007, lo que valdrá también para Excel 2010.

En primer lugar pulsamos Alt+F11 para mostrar la ventana de Macros y de edición de Visual Basic.

En la carpeta "Módulos" (parte izquierda), hace clic con el botón derecho, y en el menú contextual seleccionar "Insertar" y "Módulo".

A continuación, escribir el siguiente procedimiento:


Sub ConvertirNumeros()
' Seleccion del rango
    Range("A1:A5000").Select
' Conversion a formato numero sin decimales
    Selection.NumberFormat = "0"
' Recorrido por la seleccion para su conversion
    For Each xCell In Selection
        ' Comprobando si tiene informacion, va mucho mas rapido
        If xCell.Value <> "" Then
            xCell.Value = xCell.Value
        End If
    Next xCell
End Sub

Para ejecutar este código, acceder al menú "Vista", seleccionar la opción "Macros" y seleccionar "Ver macros". Aparecerá un diálogo mostrando "ConvertirNumeros". Seleccionar esta macro, y a continuación hacer clic en el botón "Ejecutar".

Otra forma más profesional de ejecutar el código es creando un objeto y hacer clic sobre él. Por ejemplo, se crear una forma (por ejemplo, un rectángulo), y se incluye un texto (por ejemplo, "Convertir"). Seleccionar este objeto y hacer clic con el botón derecho, y en el menú contextual seleccionar "Asignar macro...". En el diálogo, seleccionar "ConvertirNumeros" y hacer clic en el botón "Aceptar". Ahora, cada vez que se haga clic en esta forma, se ejecutará el código para convertir a número.

Lo siguiente es una mejora al código anterior, pues la coma decimal no es interpretada correctamente, requiriendo a veces que sea un punto decimal. Además de corregir este problema, además gana más velocidad aún, ya que sólo convierte los datos que sean numéricos, omitiendo textos normales y fechas.


Sub ConvertirNumeros()
' Seleccion del rango
    Range("A1:A5000").Select
' Conversion a formato numero sin decimales
    Selection.NumberFormat = "0.0"
' Recorrido por la seleccion para su conversion
    For Each xCell In Selection
        ' Comprobando si tiene informacion, va mucho mas rapido
        If xCell.Value <> "" Then
            If IsNumeric(xCell.Value) Then
                xCell.Value = 0 + xCell.Value
            End If
        End If
    Next xCell
End Sub