Se você nos mostrou a gama completa de formatos possíveis, isso deve funcionar:
=TEXT(A1, IF(CELL("format",A1)="D4", "m/d/yy", "General"))
Se você tiver formatos de data diferentes de m / d / yy, adicione testes para eles.
Como posso obter o valor exibido de uma célula no MS Excel (para o texto que foi convertido em datas)?
Eu tenho um arquivo do Excel que era originalmente um arquivo CSV. No momento, não tenho acesso ao arquivo CSV original. Quando o arquivo CSV foi originalmente aberto no Excel, muitas das células na coluna Date
foram convertidas automaticamente.
Este é um exemplo de alguns itens da coluna Date
(o espaçamento representa as células alinhadas à esquerda e à direita, principalmente para mostrar que a segunda data não foi convertida):
exibição 1:
3/1/71
12/01/1882
Fall 1988
1993
E se eu escolher uma dessas células e clicar com o botão direito do mouse e selecionar a formatação, obtenho coisas diferentes:
m/d/yy
General
General
General
Parece que o excel não converteu a data de 12/01/1882 - talvez porque seja "muito antigo" ou talvez por outro motivo.
Se eu selecionar a coluna inteira e alterá-la para a formatação "Geral", isso me dará isso (texto alinhado à esquerda, números alinhados à direita):
25993
12/01/1882
Fall 1988
1993
Gostaria de ter uma coluna em que eu definisse o formato como "Geral" ou "Texto" e as datas exibidas da exibição 1 acima.
Eu vi esta pergunta sobre o uso de uma classe DataFormatter (parecida com Java?) e algumas questões similares que usam macros e scripts VB - mas, se possível, eu realmente gostaria de uma maneira de usar uma função do excel para fazer isso.
Eu tentei usar essas coisas que não funcionaram:
CONCATENATE
- para obter o campo de data e prefixar com um espaço
INDIRECT(ADDRESS(ROW(),5))
- obter o valor indiretamente
VALUE()
- obter o "valor" da célula - oposto do que eu quer
TEXT()
- pode especificar explicitamente o formato mas ainda não pode fazê-lo funcionar% CELL()
- pode ser usado para obter informações de célula como "conteúdo" - sem sorte com isso, mas eu vi que eu poderia usá-lo também para obter format
, o que me diria se a célula é exibida como um número ou como "geral", que poderia possivelmente ser usada com uma função IF
para converter um número exibido como uma data de volta para uma data real ... possivelmente?
Copiar método de colagem
Um método que vi que parece funcionar é selecionar os valores, copiá-los e colá-los no bloco de notas e copiá-los e colá-los de volta no excel (efetivamente fornece o valor exibido - que é o que eu quero)
O único problema é que eu gostaria de ter uma função para fazer isso porque a planilha do excel tem algumas centenas de milhares de linhas.
Uma resposta geral:
Em vez de tentar mexer nos resultados da função CELL ("format" ...), pode ser mais fácil usar uma função definida pelo usuário para retornar diretamente a propriedade NumberFormat da célula.
Nesse caso, a expressão "= TEXT (A1, NumberFormat (A1))" fornecerá o valor exibido, e não diretamente.
Para habilitar isso, você precisa do seguinte em um módulo da planilha:
Public Function NumberFormat(CellRange As Range) As String
NumberFormat = CellRange.NumberFormat
End Function
A mesma resposta, mas com uma função diferente (que funcionou para mim):
Public Function DisplayText(ByVal pRange As Range) As String
DisplayText = pRange.Text
End Function
Use apenas = DisplayText (A1). Se você alterar o formato da célula, esta função retornará o texto exibido