Precisão da data do Excel e descarte inesperado de precisão de 1 s

1

O problema

Uma célula datetime contém dados com precisão de até décimos de segundo ou maior precisão, mas descarta essa precisão para precisão de nível "segundo" quando os dados da célula são editados, mesmo que nada seja alterado.

Para recriar

Obviamente, elementos disso podem ser locais, específicos de máquina e / ou usuário, mas o que está abaixo representa minha experiência em 2 desktops e um laptop, sempre no Excel 2010, no Reino Unido.

  1. Insira "19/04/2015 13: 26: 15.456" em uma célula sem as aspas (formato do Reino Unido, portanto, 19/04/2015 nos EUA, presumivelmente); pressione enter para que o conteúdo seja aceito.
    • O Excel decide formatá-lo como "mm: ss.0", tornando-o "26: 15,5"
  2. Voltar para a célula em questão sem editá-la ainda
    • pode-se ver que "perdeu" a precisão na barra de fórmulas, mostrando como "19/04/2015 13:26:15" sem frações de segundo. No entanto, a célula ainda mostra "26: 15,5", indicando pela cauda 0,5 que a precisão ainda está presente.
  3. CTRL-1 e altere o formato de "mm: ss.0" para "dd / mm / aaaa hh: mm: ss.000". Ele agora processa corretamente como "19/04/2015 13: 26: 15.456" na célula (mas ainda sem o .456 na barra de fórmulas).
  4. Esse é o ponto crucial do problema; agora pressione F2 e pressione enter; isto é, "edite" a célula, mas sem alterar nada. A precisão < 1 segundo é descartado e a célula mostra agora "19/04/2015 13:26:15. 000 "

Isso significa que, se eu editar a parte da data de uma célula (ou seja, alterar de abril a maio ou avançar um ano, etc.) ou simplesmente clicar duas vezes acidentalmente, descarto a precisão decimal todas as vezes. Existe alguma maneira de evitar que isso aconteça?

Para provar que o valor está mudando e não apenas a formatação, adicionei uma fórmula a uma célula adjacente para renderizar a data como decimal (10dp), e o valor só muda imediatamente após a etapa 4 acima. / p>     

por AndyBrown 04.10.2016 / 15:35

1 resposta

1

Se você tiver uma configuração de célula como data / hora da seguinte forma:

Selecioneacélulaeexecuteestamacrocurta:

SubbeforeEDIT()DimsAsStringWithActiveCells=.Text.ClearContents.NumberFormat="@"
        .Value = s
    End With
End Sub

Ele converterá a célula em texto puro (e preservará milissegundos) . Você pode editar a célula, alterar mês ou dia, etc.

Quando tiver concluído suas edições, execute essa segunda macro para converter o texto de volta em data / hora.

Sub afterEDIT()
    With ActiveCell
        .NumberFormat = "mm/dd/yyyy hh:mm:ss.000"
        .Value = .Value
    End With
End Sub
    
por 04.10.2016 / 17:26