De acuerdo con esta pregunta , tengo el siguiente problema:
Quiero usar alguna función de Excel (no el formato de celda) como TEXTO (A1, {date_pattern})
Pero la persona que respondió mi pregunta anterior me hizo descubrir que el patrón de fecha cambia de acuerdo con la Configuración regional de Windows.
Sin embargo, mi sistema operativo (Windows 7) está en inglés y la suite de Office también. Al mirar en mi configuración regional, muestra incluso un patrón con notación en inglés (dd.MM.aaaa)
Quiero saber si hay alguna forma de deshabilitar dicho comportamiento de Excel, lo que significa que siempre quiero usar los patrones en inglés y nunca los localizados porque no quiero que el comportamiento de mi hoja de Excel cambie de acuerdo con la localización del lector.
Un caso simple sería volver a formatear algún campo de fecha en una computadora centrada de esta manera: "aaaammdd_hhss", esto se reconoce universalmente y se puede ordenar de arriba a abajo fácilmente. Pero como estoy en la parte francesa de Suiza, debería escribir "aaaammjj_hhss" y si le envío este Excel a un colega en Zürich, no podría ver la fecha correcta ya que obtuvo la localización suizo-alemana (su excelencia esperaría "jjjjmmtt_hhss")
Fuimos lo suficientemente inteligentes como para instalar todas las ventanas y la oficina en inglés, pero aún nos enfrentamos a un problema como este debido a este enlace a la configuración regional del sistema operativo.
Para mí, cambiar la configuración de Windows no es una opción porque todos los demás programas están usando esta configuración.
Respuestas:
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:
Lo que esto hace es simplemente usar la propia
Format
función de VBA en lugar de laTEXT
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:
yyyymmdd\_hhss
a la celda $ A $ 1 (tenga en cuenta que el guión bajo debe escaparse como se muestra).GetFormat
función (que se muestra a continuación) a un módulo VBA en su libro de trabajo.=GetFormat($A$1, TRUE)
en otra celda (por ejemplo, $ B $ 1 )yyyymmdd\_hhss
, cuando abre el libro en una computadora que usa el idioma francés (por ejemplo), la función se mostraráaaaammjj\_hhss
.TEXT
funciones. Por ejemplo:=TEXT(F22, $B$1)
.Aquí está el código VBA:
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.
GetFormat(Cell, FALSE)
cada celda en la columna 1. (Recuerde queFALSE
para el segundo parámetro hace que la función devuelva los formatos NO localizados ).GetFormat(Cell, TRUE)
retorna para cada celda en la columna 2. (es decir, los formatos localizados ).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 conTEXT
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.
fuente
Para las fechas, puede definir un formato que haga que Excel use una determinada configuración regional. Si establece el formato de número de la celda que contiene su fecha en algo como
Excel mostrará su fecha en una ubicación de EE. UU. (Hex 409)
Gotcha: la notación YMD está localizada y, por lo tanto, se convierte en JMT en un sistema alemán, por ejemplo. Por lo tanto, es posible que deba adaptar la cadena de formato a su situación, pero esperaría que se comportara como las fórmulas (autotranslate) en sistemas que usan un idioma diferente (como parece estar al tanto).
Consulte aquí para obtener más detalles: /programming/894805/excel-number-format-what-is-409
y aquí para obtener una lista de configuraciones regionales: http://support.microsoft.com/kb/221435
fuente
Aunque esta pregunta es un poco vieja, me encontré con otra solución (¡simple!) Y estoy publicando aquí en aras de la exhaustividad / referencia.
Intenté la respuesta de ricovox con éxito, pero quería una solución sin VBA.
También probamos la solución de MarinD. Pero, como se señaló en los comentarios, si necesita atender a más de un formato específico de país, puede ser difícil de manejar bastante rápido.
Y ahora a mi solución: usar las funciones nativas de Excel AÑO (), MES () y FECHA (), envueltas en TEXTO () para rellenar los ceros al frente. Con la fecha en A1:
=TEXT(YEAR(A1),"0000")&"-"&TEXT(MONTH(A1),"00")&"-"&TEXT(DAY(A1),"00")
me da la fecha en
YYYY-MM-DD
el formato, independientemente si la localización actual requiereYYYY-MM-DD
oAAAA-MM-JJ
o cualesquiera otros nombres localizados para el año / mes / día.Excel traduce sus fórmulas nativas automáticamente.
fuente
Una manera muy simple de evitar todo el desorden es crear una lista de días de fechas conocidas y usar la lista en su función.
fuente
Una forma sencilla de resolver el problema del formato de fecha de configuración regional de Excel es usar la
CHOOSE
función:En estos ejemplos, obtendrá el Día y el Mes en letras sin usar formatos locales como "Mmmm" o "Dddd" o "Jjjj".
fuente
Si su fecha de referencia está en la celda A1:
fuente
if(if(if...
para cada formato en todo el mundo, sería muy difícil de administrar.Ahora he usado una lógica similar al Método 2 dado con las Macros. Las macros funcionan, pero generalmente cuando envía un archivo de una organización a otra, las macros no se realizarán a través del intercambio o el antivirus no las dejará ejecutar. Así que simplemente he renombrado ia cell como dateformat. En esta celda simplemente ingresé el texto dd / mm / aaaa. Entonces, cuando estoy usando la función de texto, estoy usando el nombre de la celda para el formato, por ejemplo, = texto (C1, formato de fecha) y parece estar funcionando (precisamente para Suiza funciona).
Salud...
A.
fuente
=TEXT(C1,dateformat)
qué funcionaría (con ladateformat
celda que contienedd/mm/yyyy
) cuando=TEXT(C1, "dd/mm/yyyy")
no funciona? (¿O funciona?)No puedo creer que nadie haya ofrecido los formatos nombrados como solución.
Si formatea una fecha e ingresa
=TEXT(A1,"Short Date")
, usará automáticamente el formato adecuado según la configuración regional con cero problemas entre regiones."Fecha larga" también es una entrada aceptable y funcionará sin problemas en todas las regiones. También se convertirá de nuevo a una fecha adecuada en VBA con cvdate independientemente de la versión utilizada.
fuente
Simplemente lanzando otra alternativa elegante tomada de: Respuesta de Stackoverflow por @Taosique
fuente
#VALUE
error). Incluso si la palabra comienza con "m", hay más de 2 opciones aquí. Alemania, Polonia y Hungría tienen códigos de formato diferentes, por nombrar solo algunos.Lo sé, tarde a la fiesta, pero al investigar esto, encontré una solución que funciona en ExcelBanter que no necesita VBA.
El camino a seguir es usar el antiguo sistema macro Excel v4. Todavía se puede acceder a través de rangos con nombre o hojas de macro v4. También fue una experiencia de aprendizaje para mí; una página en Excel fuera de la cuadrícula y una en el sitio de Ron de Bruin fueron buenas presentaciones. Este último también tiene un enlace a un libro de trabajo con la misma solución.
Básicamente, la antigua función macro de Excel v4 GET.WORKSPACE se puede usar para obtener metainformación sobre muchas cosas, incluido el formato de fecha localizado en uso. GET.WORKSPACE (37) devuelve una matriz de todos los caracteres utilizados para todo tipo de separadores, etc., donde el índice 19-20-21 contiene la letra utilizada para el formato de año, mes y día. Entonces, usar INDEX (GET.WORKSPACE (37), 19) devuelve "y" en la configuración del idioma inglés, "j" en holandés y "a" en español. Combina eso con un REPT para generar el código de 4 letras y listo. Sin embargo, el problema es que las funciones antiguas de v4 (como GET.WORKSPACE) solo pueden ser utilizadas por las hojas de macros de estilo v4 y los rangos con nombre.
Así:
=REPT(INDEX(GET.WORKSPACE(37),19),4)
=TEXT(A1, MonthFormat)
fuente