Cómo arreglar fechas en su hoja de trabajo de Excel con VBA

Comparte ahora:

¿Con qué frecuencia obtenemos fechas en hojas de cálculo que se nos proporcionaron como 12.26.2016/26/12 o 2016/26/XNUMX (formato del Reino Unido), solo para que nos digan que la fecha no es válida o que no hay el mes XNUMX? Este artículo explora la fijación de fechas con VBA, utilizando las funciones TRIM, LEFT, RIGHT y MID.

El artículo asume que el lector muestra la cinta Desarrollador y está familiarizado con el Editor de VBA. De lo contrario, busque en Google "Pestaña de desarrollador de Excel" o "Ventana de código de Excel".

El xlsm de este ejercicio se puede descargar aquí.

¡No es nuestro problema!

Agregar 7 días a una fechaEl mejor lugar para resolver un problema es la fuente. Sin embargo, ninguna cantidad de persuasión puede convencer al departamento de nómina en este caso de que el 12.26.1994 no es una fecha válida (a menos que así se configure en el Panel de control de la computadora para algunos países de Europa del Este).

De hecho, podemos demostrar que no es legible por máquina. Por ejemplo, agregando 7 días a una fecha:

"=01.01.2017 + 7" = #VALUE. 

"=2017.01.01 + 7" = #VALUE.

mientras…

"=2017-01-01 + 7" = 2017/01/08.

Supongamos que sugieren que no es su problema.

Formatos de fecha

Lo primero que tenemos que averiguar es si la fecha está en formato USA o Internacional.Fecha en formato de EE. UU.

Nuestro ejemplo deja en claro que estamos viendo el uso de EE. UU., Es decir, MDY en lugar del formato internacional DMY.

Una vez que hemos establecido la fuente, debemos cambiar los formatos de datos para que Excel pueda entenderlos, ya sea a nivel internacional o en los EE. UU.

La mejor manera de hacer esto es cambiar la fecha a aaaammdd, un formato que no necesita calificación.

El Proceso

Pasaremos por cada fila del documento, llamando a una función para "corregir" la fecha según el país de origen. Una vez que se corrija la fecha, calcularemos la edad del Empleado.

El código

Copie el siguiente código en un módulo nuevo:

Option Explicit

Sub Main()
    Dim strNewFormat As String
    Dim strDate As String
    Sheets("Main").Range("B4").Select
    
    'Cycle through the sheet rows, using IDNumber as an anchor
    'to prevent a premature halt caused by a blank date of birth
    Do While ActiveCell > ""
        If ActiveCell.Offset(0, 2) > "" Then
            strDate = ActiveCell.Offset(0, 2)
            
            'Remove leading or trailing spaces
            strDate = Trim(strDate)
            
            'Call the function
            strNewFormat = ReformatDate(strDate, "USA")
            
            'Write the result from the function ReformatDate to a new column
            ActiveCell.Offset(0, 3) = strNewFormat
            
            'Determine age by subtracting the previous column from today's date
            ActiveCell.Offset(0, 4) = "=(NOW()-RC[-1])/365.25"
            
            'Convert to intger, thus lopping off decimal places
            ActiveCell.Offset(0, 4) = Int(ActiveCell.Offset(0, 4))
        End If
        Range("B" & ActiveCell.Row + 1).Select
    Loop
End Sub

Function ReformatDate(sDate As String, sSource As String)
    Dim yyyy, mm, dd As String
    yyyy = Right(sDate, 4)
    If sSource = "USA" Then
        mm = Left(sDate, 2)
        dd = Mid(sDate, 4, 2)
    Else
        mm = Mid(sDate, 4, 2)
        dd = Left(sDate, 2)
    End If
    ReformatDate = yyyy & "-" & mm & "-" & dd
End Function

Agregue un botón a su formulario y asígnelo a Sub Main.

Advertencia

Antes de agregar demasiado código complejo a su módulo, tenga en cuenta que Excel no siempre es estable en el desarrollo de aplicaciones importantes y, a menudo, no puede recuperar el código dañado. El resultado podría ser la corrupción de su única copia ya que la corrupción ocurre en "Guardar".

Realice copias de seguridad con frecuencia y tenga el uso de una herramienta para corregir Corrupción de archivos de Excel.

Introducción del autor:

Felix Hooker es un experto en recuperación de datos en DataNumen, Inc., que es el líder mundial en tecnologías de recuperación de datos, incluyendo reparación rar corrupción de archivos y productos de software de recuperación de sql. Para más información visite www.datanumen.com

Comparte ahora:

Los comentarios están cerrados.