Luis recibe información en la que las fechas se codifican de manera que los años, meses y días se reemplazan con un solo carácter cada uno. Para cada campo, se utilizan los números del 1 al 9 y después las letras, de a = 10, b = 11, …​ v = 31. Por ejemplo, el código de fecha ‘bc2’ significa b = 11 (el año 2011), c = 12 (el mes) y día = 2. Luis se pregunta si se puede idear una función para reemplazar la fecha codificada con un formato de fecha común, como dd / mm / aaaa.

En realidad, hay varias formas de resolver este problema.

Una forma es configurar «tablas de equivalencia» dentro de una hoja de trabajo, donde la columna de la izquierda incluye un carácter de código y la derecha indica el valor numérico que está asociado con ese carácter. Luego, podría diseñar una fórmula que use BUSCARV para encontrar los valores y convertir los resultados en una fecha.

Como ejemplo, cree su tabla de equivalencia en algunas celdas no utilizadas a la derecha de sus datos. En mi caso, pongo la tabla en las columnas P y Q. En la columna P pongo los caracteres del código, del 1 al 9 y de la aa la z. (Asegúrese de preceder los dígitos del 1 al 9 con un apóstrofo para que se almacenen como texto en lugar de números). En la columna Q, puse los números del 1 al 35. Todo este rango (P1: Q35) Luego le di un nombre de DateTable .

Aquí está la fórmula, entonces, que devolverá una fecha decodificada para una fecha codificada almacenada en la celda A1:

=DATE(2000+VLOOKUP(LEFT(A1,1),DateTable,2,0), VLOOKUP(MID(A1,2,1),DateTable,2,0),VLOOKUP(RIGHT(A1,1), DateTable,2,0))

Recuerde que esta es una fórmula única y continua. Otra técnica es omitir las tablas de equivalencia por completo y, en su lugar, utilizar una fórmula para realizar la conversión. El siguiente es un ejemplo que decodificará una fecha en la celda A1:

=DATE(2000+FIND(LEFT(A1,1),"123456789abcdefghijklmnopqrstuvwxyz"), FIND(MID(A1,2,1),"123456789abc"),FIND(MID(A1,3,1), "123456789abcdefghijklmnopqrstuv"))

Esta fórmula usa la función ENCONTRAR para traducir del carácter del código a un valor, y luego estos valores se usan en la función FECHA para devolver la fecha deseada. Otra posible fórmula se basa, en cambio, en los valores del código de carácter para crear la fecha:

=DATE(2000+CODE(MID(A1,1,1))-87+(CODE(MID(A1,1,1))<58)39,CODE(MID(A1,2,1))-87+(CODE(MID(A1,2,1))<58)39,CODE(MID(A1,3,1))-87+(CODE(MID(A1,3,1))<58)*39)

Finalmente, puede crear una función definida por el usuario para devolver la fecha decodificada. El siguiente es solo un ejemplo simple; mira cada carácter y lo convierte en un valor numérico que luego se usa con la función DateSerial para crear un número de serie de fecha de Excel:

Function DecodeDate(datecode As String)

Const X = "123456789abcdefghijklmnopqrstuvwxyz"

Dim D As Integer     Dim M As Integer     Dim Y As Integer

Application.Volatile     D = InStr(X, Right(datecode, 1))

M = InStr(X, Mid(datecode, 2, 1))

Y = 2000 + InStr(X, Left(datecode, 1))

DecodeDate = DateSerial(Y, M, D)

End Function

También se debe señalar que, independientemente del enfoque que utilice, existe una falla inherente en sus códigos de fecha. El año utiliza los valores de código del 1 al 9 y de la aa la z. Esto significa que el código de fecha puede ser uno de 35 valores posibles. Cuando se agrega al año 2000 (el año base de cómo describió el código), eso significa que el valor máximo de año que se puede codificar es 2035. Cualquier fecha posterior a ese año no funcionará con esta codificación.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (12422) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.

Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:

enlace: / excelribbon-Deciphering_a_Coded_Date [Descifrando una fecha codificada].