Esta pregunta es un poco vieja, pero hasta la fecha no parece tener una respuesta. También he visto preguntas similares en varios sitios, pero aún no he encontrado ninguna respuesta que involucre solo funciones integradas de Excel. Sin embargo, es bastante fácil resolver esto con VBA. Ni siquiera tiene que saber programar para hacer esto, porque la función requerida es muy simple.
Con su libro abierto, simplemente presione Alt + F11 (para abrir el editor VBA) Luego haga clic en el elemento de menú Insertar > Módulo
En el nuevo módulo VBA, ingrese lo siguiente:
Public Function FMT$(ByVal Value, ByVal strFormat)
FMT = VBA.Format$(Value, strFormat)
End Function
Lo que esto hace es simplemente usar la propia Format
función de VBA en lugar de la TEXT
función de Excel . Esto es exactamente lo que quieres.
Esta nueva función formateará cualquier fecha (o número) de acuerdo con la cadena de formato que especifique. Interpretará la cadena de formato utilizando la notación estándar ( en-EE . UU. ), Independientemente de la configuración regional del sistema operativo.
Para usar esto en su libro de trabajo, simplemente escriba en =FMT(A1, "yyyymmdd_hhss")
lugar de =TEXT(A1, "yyyymmdd_hhss")
. (Por supuesto, puede cambiar la referencia de celda y la cadena de formato según sea necesario).
Por cierto, puedes nombrar la función como quieras. Elegí FMT
porque era breve y porque la función puede formatear números y fechas. Pero puede elegir algo más descriptivo si lo desea. Solo recuerde usar el mismo nombre en su hoja de trabajo que en el código VBA.
Tenga en cuenta que las cadenas de formato VBA no son exactamente las mismas que las cadenas de formato personalizadas de Excel (por ejemplo, use "n" en lugar de "m" durante minutos), pero son muy similares. Mire aquí para más detalles, o busque MSDN para "Función de formato (Visual Basic para aplicaciones)" Desplácese hacia abajo para ver los distintos especificadores de formato de fecha.
Método 2
Otro enfoque que también usa VBA, pero que en realidad podría ser más fácil de mantener, es el siguiente:
- Aplique el formato de fecha deseado a una celda, usando el diálogo normal de Formato de celda. Esta celda puede estar en una hoja oculta si lo prefiere; no es necesario que se muestre al usuario final. Supongamos que aplicó el formato
yyyymmdd\_hhss
a la celda $ A $ 1 (tenga en cuenta que el guión bajo debe escaparse como se muestra).
- Agregue la
GetFormat
función (que se muestra a continuación) a un módulo VBA en su libro de trabajo.
- Ingrese
=GetFormat($A$1, TRUE)
en otra celda (por ejemplo, $ B $ 1 )
- Esa función devolverá la versión localizada de la cadena de formato. Entonces, aunque originalmente formateó $ A $ 1 con
yyyymmdd\_hhss
, cuando abre el libro en una computadora que usa el idioma francés (por ejemplo), la función se mostrará aaaammjj\_hhss
.
- Ahora simplemente haga referencia a la segunda celda en todas sus
TEXT
funciones. Por ejemplo: =TEXT(F22, $B$1)
.
Aquí está el código VBA:
Public Function GetFormat$(Cell As Range, Optional ByVal UseLocal As Boolean)
If UseLocal Then
GetFormat = Cell.NumberFormatLocal
Else
GetFormat = Cell.NumberFormat
End If
End Function
Esto nos permite "inspeccionar" la celda que formateó originalmente ($ A $ 1) para recuperar la cadena de formato localizada. Esa cadena representará el mismo formato que aplicó, pero usará las letras correctas para que TEXT interprete ("j" en lugar de "d", por ejemplo), por lo que el valor mostrado de las fechas será constante en todas las configuraciones regionales. Si desea utilizar solo un formato de fecha para todo su libro de trabajo, solo necesitaría realizar los pasos 1-4 una vez. Luego repita el paso 5 (la función TEXTO) en todas las celdas donde lo usa actualmente, pero en lugar de codificar un formato, simplemente haría referencia a la celda que contiene la cadena de formato localizada ( $ B $ 1 en las instrucciones de ejemplo) .
Tenga en cuenta que el segundo argumento GetFormat
le dice a la función si devolver o no la versión localizada (que depende de la configuración regional) o la versión "estándar" (que siempre se basa en en-US).
Aquí hay algunas capturas de pantalla que podrían aclarar esto.
- En la figura, la Columna 1 enumera varias representaciones de una sola fecha con diferentes formatos aplicados.
- Tenga en cuenta que las filas 2 y 3 usan los formatos de fecha "predeterminados del sistema" de Excel. (Estos se indican con un asterisco inicial en el Diálogo de formato e indican que se debe usar el formato de fecha predeterminado del usuario). También tenga en cuenta que la fila 5 usa un LCID entre corchetes, que obliga a que el idioma utilizado para los nombres de mes y día sea inglés ( Se pueden usar diferentes LCID para especificar otros idiomas).
- La segunda columna muestra el resultado de
GetFormat(Cell, FALSE)
cada celda en la columna 1. (Recuerde que FALSE
para el segundo parámetro hace que la función devuelva los formatos NO localizados ).
- La tercera columna muestra qué
GetFormat(Cell, TRUE)
retorna para cada celda en la columna 2. (es decir, los formatos localizados ).
- La cuarta columna muestra el resultado de la función TEXTO utilizando el valor de fecha original sin procesar y el resultado localizado de
GetFormat
volver a producir el formato que se muestra en la columna 1. Sin embargo, tenga en cuenta que NO se aplicó formato de número a esta columna. Los valores son un resultado directo de la función TEXTO.
Los resultados para el caso anterior en inglés (EE. UU.) No son muy interesantes, pero puede compararlos con los siguientes resultados que se obtuvieron al cambiar la Configuración regional de mi sistema operativo a otras configuraciones regionales. Es importante destacar que al usarlo GetFormat
en combinación con TEXT
podemos retener un resultado constante para formatos numéricos (aquellos que no incluyen nombres de día o mes) en todas las configuraciones regionales. Y al restringir el idioma utilizando un LCID (como en la fila 5), incluso podemos mantener un formato constante cuando se incluyen también los nombres de día y mes.
Este método funciona para la mayoría de las configuraciones regionales, sin embargo, debe tenerse en cuenta que los scripts utilizados para representar los números hindúes-árabes NO son los mismos en todas las configuraciones regionales. Por lo tanto, las configuraciones regionales como las de la configuración regional de Nepal (India) darán como resultado formatos de fecha que "se ven" diferentes a las fechas en EE. UU. Pero estos en realidad están en el mismo "formato" en términos de las posiciones de los números: solo usan símbolos diferentes para los números.