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:
Public Function FMT$(ByVal Value, ByVal strFormat)
FMT = VBA.Format$(Value, strFormat)
End Function
O que isso faz é simplesmente usar a própria Format
função do VBA em vez da função do Excel TEXT
. É 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:
- Aplique o formato de data desejado a uma célula, usando a caixa de diálogo Formato normal da célula. Essa célula pode estar em uma planilha oculta, se você preferir - não precisa ser exibida para o usuário final. Vamos supor que você aplicou o formato
yyyymmdd\_hhss
à célula $ A $ 1 (observe que o sublinhado deve ser escapado, como mostrado).
- Adicione a
GetFormat
função (mostrada abaixo) a um módulo VBA na sua pasta de trabalho.
- Entrar
=GetFormat($A$1, TRUE)
em outra célula (por exemplo, $ B $ 1 )
- Essa função retornará a versão localizada da string de formato. Assim, mesmo que você originalmente formatado $ A $ 1 com
yyyymmdd\_hhss
, quando você abre a pasta de trabalho em um computador usando o idioma francês (por exemplo), a função irá mostrar aaaammjj\_hhss
.
- Agora basta referenciar a segunda célula em todas as suas
TEXT
funções. Por exemplo: =TEXT(F22, $B$1)
.
Aqui está o 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
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.
- Na figura, a coluna 1 lista várias representações de uma única data com diferentes formatos aplicados.
- Observe que as linhas 2 e 3 usam os formatos de data "padrão do sistema" do Excel. (Eles são indicados por um asterisco à esquerda na caixa de diálogo Formatar e indicam que o formato de data padrão do usuário deve ser usado.) Observe também que a linha 5 usa um LCID entre colchetes, que força o idioma usado para os nomes dos meses e dias para o inglês ( LCIDs diferentes podem ser usados para especificar outros idiomas).
- A segunda coluna mostra o resultado de
GetFormat(Cell, FALSE)
cada célula na coluna 1. (Lembre-se de que FALSE
o segundo parâmetro faz com que a função retorne os formatos NÃO localizados ).
- A terceira coluna mostra o que
GetFormat(Cell, TRUE)
retorna para cada célula na coluna 2. (ou seja, os formatos localizados ).
- A quarta coluna mostra o resultado da função TEXT usando o valor original da data bruta e o resultado localizado
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.