La comprensión de la función isdate excel vba

función IsDate de VBA supuestamente le indica si una cadena de texto puede ser interpretado como una fecha. Por ejemplo, todas las siguientes expresiones dan como resultado true:

IsDate ( “05.25.2015”) IsDate ( “Enero 16”) IsDate ( “12-1”) IsDate ( “01/12/15”) IsDate ( “2/30”) IsDate ( “30/2” )

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

Video: MS Excel - Using Format Function to Format the Date in VBA

He aquí alguna información de una Artículo de soporte de Microsoft:

El VBA funciones de fecha IsDate, formato, CDate y CVDate utilizar una función que se encuentra en la automatización OLE (OleAut32.dll). Esta función busca en todos los posibles formatos de fecha por tokenizar cada uno de los valores separados de la cadena que representa la fecha y devuelve un valor booleano que indica si la entrada se puede representar como una fecha.

Esto es importante tener en cuenta al utilizar la función de interpretar una fecha que contiene un año de 2 dígitos. Diferentes entornos nacionales utilizan diferentes formatos de fecha (es decir, dd / mm / aa, aa / mm / dd, DD MMM AA, YY DD MMM, y así sucesivamente) y por lo tanto la función intenta los dígitos en todas las posiciones hasta que la función ha encontrado una fecha válida o agotado todas las posibilidades.

El hecho de que IsDate reconoce una cadena como una fecha no significa que la cadena se puede convertir de forma fiable a una fecha. En algunos casos, el resultado es ambiguo. Por ejemplo, ¿qué pasa con esta expresión?

IsDate ( “29-Feb-01”)

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

Una búsqueda de la documentación IsDate encontró nada. Basado en las pruebas, IsDate acepta cualquier de los siguientes como caracteres separadores: una barra (/), un guión (-), una coma (,), un punto, y un espacio (.).

Por lo tanto, las siguientes expresiones todas devuelven True:

IsDate ( “5,1”) IsDate ( “30 6”) IsDate ( “30,6”) IsDate ( “medio”)

Pero luego está esta anomalía: Los siguientes expresiones devuelve True:

IsDate ( “5.1.5”) IsDate ( “01/05/05”)

Sin embargo, inexplicitly, esta expresión devuelve Falso:

IsDate ( “5.1.2005”)

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

Las cosas se ponen aún más confuso cuando se da cuenta de que IsDate también cubre los valores de tiempo. (No hay función IsTime correspondiente.) Por lo tanto, las siguientes expresiones todas de vuelta verdad:

IsDate ( “04: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 presenta todas estas peculiaridades cuando se pasa un argumento Range. Por ejemplo:

Video: Excel Avanzado: función ARRAY en VBA

IsDate (Range ( “A1”))

Parece que IsDate es perfectamente fiable en la identificación de células que contiene una fecha o una hora. No lo hace, por ejemplo, identificar una célula que contiene 5.1 como una fecha. Si el código necesita para determinar si una cadena se puede interpretar como una fecha, la mejor solución es poner esa cadena en una celda, y luego escribir código para comprobar el contenido celular.

Artículos Relacionados