De acordo com esta pergunta , tenho o seguinte problema:
Quero usar alguma função do Excel (não a formatação da célula) como TEXT (A1, {date_pattern})
Mas a pessoa que respondeu à minha pergunta anterior me fez descobrir que o padrão de data muda de acordo com as Configurações Regionais do Windows.
No entanto, meu sistema operacional (Windows 7) também está em inglês e o pacote Office. Ao examinar minhas configurações regionais, ele mostra até um padrão usando a notação em inglês (dd.MM.aaaa)
Quero saber se existe alguma maneira de desativar esse comportamento no Excel, o que significa que quero sempre usar os padrões em inglês e nunca os localizados, porque não quero que o comportamento da minha planilha do Excel mude de acordo com a localização do leitor.
Um caso simples seria reformatar algum campo de data para uma maneira centrada no computador como esta: "aaaammdd_hhss", isso é reconhecido universalmente e pode ser ordenado de cima para baixo facilmente. Mas como eu estou na parte francesa da Suíça, eu deveria escrever "aaaammjj_hhss" e se eu enviar este Excel para um colega em Zurique, ele não conseguiria ver a data correta quando obtivesse a localização suíço-alemã (seu excel esperaria "jjjjmmtt_hhss")
Éramos espertos o suficiente para instalar todas as janelas e escritórios em inglês, mas ainda enfrentamos problemas como esse porque esse link para as configurações regionais do sistema operacional.
Para mim, alterar as configurações do Windows não é uma opção, porque todos os outros programas estão usando essas configurações.
Respostas:
Esta pergunta é um pouco antiga, mas até o momento não parece ter uma resposta. Também vi perguntas semelhantes em vários sites, mas ainda não encontrei nenhuma resposta que envolva apenas funções internas do Excel. No entanto, é muito fácil resolver isso com o VBA. Você nem precisa saber como programar para fazer isso, porque a função necessária é muito simples.
Com a pasta de trabalho aberta, basta pressionar Alt + F11 (para abrir o editor VBA). Em seguida, clique no item de menu Inserir > Módulo No novo módulo VBA, digite o seguinte:
O que isso faz é simplesmente usar a própria
Format
função do VBA em vez da função do ExcelTEXT
. É exatamente isso que você deseja.Essa nova função formatará qualquer data (ou número) de acordo com a string de formato especificada. Ele interpretará a sequência de formatação usando a notação padrão ( en-US ), independentemente das configurações regionais do sistema operacional.
Para usar isso em sua pasta de trabalho, basta digitar em
=FMT(A1, "yyyymmdd_hhss")
vez de=TEXT(A1, "yyyymmdd_hhss")
. (É claro que você pode alterar a referência da célula e formatar a string, conforme necessário.)A propósito, você pode nomear a função como desejar. Eu escolhi
FMT
porque era curto e porque a função pode formatar números e datas. Mas você pode escolher algo mais descritivo, se quiser. Lembre-se de usar o mesmo nome na planilha e no código VBA.Observe que as seqüências de caracteres do formato VBA não são exatamente iguais às seqüências de caracteres personalizadas do Excel (por exemplo, use "n" em vez de "m" por minutos), mas são muito semelhantes. Clique aqui para obter detalhes ou procure no MSDN "Função Format (Visual Basic for Applications)". Role para baixo para ver os vários especificadores de formato de data.
Método 2
Outra abordagem que também usa VBA, mas pode ser mais fácil de manter, é a seguinte:
yyyymmdd\_hhss
à célula $ A $ 1 (observe que o sublinhado deve ser escapado, como mostrado).GetFormat
função (mostrada abaixo) a um módulo VBA na sua pasta de trabalho.=GetFormat($A$1, TRUE)
em outra célula (por exemplo, $ B $ 1 )yyyymmdd\_hhss
, quando você abre a pasta de trabalho em um computador usando o idioma francês (por exemplo), a função irá mostraraaaammjj\_hhss
.TEXT
funções. Por exemplo:=TEXT(F22, $B$1)
.Aqui está o código VBA:
Isso nos permite "inspecionar" a célula que você formatou originalmente ($ A $ 1) para recuperar a string de formato localizada. Essa sequência representará o mesmo formato que você aplicou, mas usará as letras corretas para o TEXT interpretar ("j" em vez de "d" por exemplo), para que o valor exibido das datas seja constante em todos os locais. Se você quiser usar apenas um formato de data para toda a pasta de trabalho, precisará executar as etapas 1 a 4 apenas uma vez. Em seguida, repita a etapa 5 (a função TEXT) em todas as células em que você a usa atualmente, mas em vez de codificar um formato, basta referenciar a célula que contém a cadeia de formato localizada ( $ B $ 1 nas instruções de exemplo) .
Observe que o segundo argumento para
GetFormat
informa à função se deve ou não retornar a versão localizada (que depende das configurações regionais) ou a versão "padrão" (que é sempre baseada em en-US).Aqui estão algumas capturas de tela que podem deixar isso mais claro.
GetFormat(Cell, FALSE)
cada célula na coluna 1. (Lembre-se de queFALSE
o segundo parâmetro faz com que a função retorne os formatos NÃO localizados ).GetFormat(Cell, TRUE)
retorna para cada célula na coluna 2. (ou seja, os formatos localizados ).GetFormat
para reproduzir novamente o formato mostrado na coluna 1. Observe, no entanto, que a formatação do número NO foi aplicada a esta coluna. Os valores são um resultado direto da função TEXT.Os resultados para o caso em inglês (EUA) acima não são muito interessantes, mas você pode compará-los com os seguintes resultados que foram obtidos alterando as configurações regionais do meu sistema operacional para vários outros locais. É importante ressaltar que, ao usarmos
GetFormat
em conjunto com,TEXT
podemos manter um resultado constante para formatos numéricos (aqueles que não incluem nomes de dia ou mês) em todos os locais. E, restringindo o idioma usando um LCID (como na linha 5), podemos manter um formato constante ao incluir também nomes de dia e mês.Este método funciona para a maioria das localidades, no entanto, deve-se observar que os scripts usados para representar os algarismos hindu-árabe NÃO são os mesmos em todas as localidades. Portanto, configurações regionais como as da localidade nepalesa (Índia) resultarão em formatos de data que "parecem" diferentes das datas nos EUA. Mas eles realmente estão no mesmo "formato" em termos de posições dos números - eles apenas usam símbolos diferentes para os números.
fonte
Para datas, você pode realmente definir um formato que faça o Excel usar um determinado local. Se você definir o formato numérico da célula que contém sua data para algo como
O Excel exibirá sua data em um código de idioma dos EUA (hex 409)
Gotcha: A notação YMD é localizada e, portanto, passa para JMT em um sistema alemão, por exemplo. Talvez você precise adaptar a string de formato à sua situação, mas eu esperaria que ela se comportasse como as fórmulas (autotranslate) em sistemas usando um idioma diferente (como você parece estar ciente).
Consulte aqui para obter mais detalhes: /programming/894805/excel-number-format-what-is-409
e aqui para obter uma lista de locais: http://support.microsoft.com/kb/221435
fonte
Embora essa pergunta seja um pouco antiga, me deparei com outra solução (simples!) E estou postando aqui por uma questão de exaustividade / referência.
Tentei a resposta da ricovox com sucesso, mas queria uma solução sem o VBA.
Também testou a solução do MarinD. Mas, como apontado nos comentários, se você precisar atender a mais de um formato específico de país, ele poderá ficar pesado rapidamente.
E agora a minha solução: usando as funções nativas YEAR (), MONTH () e DATE () do Excel, agrupadas em TEXT () para preencher os zeros na frente. Com a data em A1:
=TEXT(YEAR(A1),"0000")&"-"&TEXT(MONTH(A1),"00")&"-"&TEXT(DAY(A1),"00")
dá-me a data no
YYYY-MM-DD
formato, independentemente se o idioma corrente requerYYYY-MM-DD
ouAAAA-MM-JJ
ou quaisquer outros nomes localizados ano / mês / data.O Excel converte suas fórmulas nativas automaticamente.
fonte
Uma maneira muito simples de evitar toda a bagunça é criar uma lista de dias de datas conhecidas e usar a lista em sua função.
fonte
Uma maneira simples de resolver o problema do formato de data da localidade do Excel é usar a
CHOOSE
função:Nestes exemplos, você receberá o dia e o mês em letras sem usar formatos de localidade como "Mmmm" ou "Dddd" ou "Jjjj".
fonte
Se a sua data de referência estiver na célula A1:
fonte
if(if(if...
para todos os formatos em todo o mundo, seria muito difícil de gerenciar.Eu agora usei uma lógica semelhante ao método 2 fornecido com as macros. As macros funcionam, mas geralmente quando você envia um arquivo de uma organização para outra, as macros não passam pela troca ou o antivírus não as deixa executar. Então, simplesmente renomei uma célula como formato de data. Nesta célula, simplesmente digitei o texto dd / mm / aaaa. Então, quando estou usando a função de texto, estou usando o nome da célula para o formato, por exemplo, = texto (C1, formato da data) e ele parece estar funcionando (exatamente para a Suíça funciona).
Felicidades...
UMA.
fonte
=TEXT(C1,dateformat)
que funcionaria (com adateformat
célula que contémdd/mm/yyyy
) quando=TEXT(C1, "dd/mm/yyyy")
não funciona? (Ou funciona?)Não acredito que ninguém tenha oferecido os formatos nomeados como solução.
Se você formatar uma data e inseri-
=TEXT(A1,"Short Date")
la, ela usará automaticamente o formato adequado, com base na configuração regional, sem zero problemas entre as regiões."Data Longa" também é uma entrada aceitável e funcionará perfeitamente entre regiões. Ele também será convertido novamente para uma data adequada no VBA com cvdate, independentemente da versão usada.
fonte
Apenas soltando outra alternativa elegante, tirada de: Stackoverflow answer by @Taosique
fonte
#VALUE
erro). Mesmo que a palavra comece com "m", existem mais de apenas duas opções aqui. Alemanha, Polônia e Hungria têm códigos de formatação diferentes para citar apenas alguns.Eu sei, atrasado para a festa, mas analisando isso sozinho, acabei de encontrar uma solução funcional no ExcelBanter que não precisa do VBA.
O caminho a seguir é usar o antigo sistema de macro do Excel v4. Ele ainda pode ser acessado por intervalos nomeados ou folhas de macro v4. Foi uma experiência de aprendizado para mim também; uma página no Excel fora da grade e uma no site de Ron de Bruin foram boas apresentações. O último também possui um link para uma pasta de trabalho com a mesma solução.
Basicamente, a antiga função de macro do Excel v4 GET.WORKSPACE pode ser usada para obter meta informações sobre muitas coisas, incluindo o formato de data localizado em uso. GET.WORKSPACE (37) retorna uma matriz de todos os caracteres usados para todos os tipos de separadores, etc., onde o índice 19-20-21 mantém a letra usada para a formatação de ano, mês e dia. Portanto, o uso de INDEX (GET.WORKSPACE (37), 19) retorna "y" nas configurações do idioma inglês, "j" no holandês e "a" no espanhol. Combine isso com um REPT para gerar o código de 4 letras e pronto. O problema é que as funções antigas da v4 (como GET.WORKSPACE) podem ser usadas apenas por folhas de macro no estilo v4 e intervalos nomeados.
Portanto:
=REPT(INDEX(GET.WORKSPACE(37),19),4)
=TEXT(A1, MonthFormat)
fonte