Comprensión de la función Excel VBA IsDate

  1. Software
  2. Oficina de Microsoft
  3. Excel
  4. Comprensión de la función Excel VBA IsDate

Libro Relacionado

Por John Walkenbach

La función IsDate de VBA supuestamente le dice si una cadena de texto puede ser interpretada como una fecha. Por ejemplo, todas las siguientes expresiones evalúan a True:

IsDate("5/25/2015")IsDate("January 16")IsDate("12-1")IsDate("12/1/15")IsDate("2/30")IsDate("30/2")

En los dos últimos ejemplos, note que IsDate no es quisquilloso con el orden del día y del mes. Ambas cadenas podrían interpretarse como una fecha, por lo que IsDate devuelve True (independientemente de la configuración de formato de fecha del sistema).

Aquí hay información de un artículo de soporte técnico de Microsoft:

Las funciones de fecha VBA IsDate, Format, CDate y CVDate utilizan una función que se encuentra en OLE Automation (OleAut32.dll). Esta función busca todos los formatos de fecha posibles mediante la simbología de cada uno de los valores separados en la cadena que representa la fecha y devuelve un valor booleano que indica si la entrada puede representarse como una fecha.

Es importante recordar esto cuando se utiliza la función para interpretar una fecha que contiene un año de 2 dígitos. Las diferentes localidades utilizan varios formatos de fecha (es decir, mm/dd/aa, aa/mm/dd, «DD MMM YY», «YY MMM DD», etc.) y, por lo tanto, la función prueba los dígitos en todas las posiciones hasta que la función ha encontrado una fecha válida o ha agotado todas las posibilidades.

Sólo porque IsDate reconozca una cadena como una fecha no significa que la cadena pueda ser convertida de forma fiable en una fecha. En algunos casos, el resultado es ambiguo. Por ejemplo, ¿qué hay de esta expresión?

IsDate("29-Feb-01")

El 29 de febrero de 2001 no es una fecha válida. Sin embargo, esta expresión devuelve True porque el 1 de febrero de 1929 (y el 2 de enero de 1929) son fechas válidas. Y también lo son esas mismas fechas en 2029.

Una búsqueda de la documentación de IsDate apareció vacía. Basado en pruebas, IsDate acepta cualquiera de los siguientes caracteres separadores: una barra (/), un guión (-), una coma (,), un punto (.) y un espacio.

Por lo tanto, todas las siguientes expresiones devuelven Verdadero:

IsDate("5.1")IsDate("30 6")IsDate("30,6")IsDate("1/2")

Pero luego está esta anomalía: Las siguientes expresiones devuelven True:

IsDate("5.1.5")IsDate("5.1.05")

Sin embargo, inexplícitamente, esta expresión devuelve Falso:

IsDate ("5.1.2005")

Suponga que ha creado un formulario de usuario con un InputBox donde el usuario introduce una fecha. Debe quedar claro que usar IsDate para validar la entrada no es muy fiable.

Las cosas se vuelven aún más confusas cuando te das cuenta de que IsDate también cubre valores de tiempo. (No hay ninguna función IsTime correspondiente.) Por lo tanto, las siguientes expresiones devuelven True:

IsDate("4:45")IsDate("4.45")IsDate("4 45")IsDate("4/45")IsDate("23:59")

Estas expresiones devuelven Falso:

IsDate("4:60")IsDate("24.45")

Es importante señalar que IsDate no exhibe todas estas peculiaridades cuando se pasa un argumento Range. Por ejemplo:

IsDate(Rango("A1"))

Parece que IsDate es perfectamente confiable en la identificación de celdas que contienen una fecha u hora. Por ejemplo, no identifica una celda que contenga 5.1 como fecha. Si su código necesita determinar si una cadena puede ser interpretada como una fecha, la mejor solución es poner esa cadena en una celda, y luego escribir código para verificar el contenido de la misma.

Post Your Thoughts