Como posso obter o valor exibido de uma célula no MS Excel (para o texto que foi convertido em datas)?

7

Como posso obter o valor exibido de uma célula no MS Excel (para o texto que foi convertido em datas)?

Origem do arquivo do Excel

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.

Valores de exemplo

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

Lógica possível

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

O que eu quero

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.

O que eu tentei

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.

    
por cwd 21.11.2013 / 18:35

3 respostas

3

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.

    
por 21.11.2013 / 20:56
4

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
    
por 16.06.2016 / 16:14
2

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

    
por 21.02.2017 / 15:43