Como obter uma marca temporal (timestamp) no Excel

msoffice_jigsaw.jpg

Existem situações em que precisamos inserir a data (ou hora) atual em uma planilha: no cabeçalho de uma nota fiscal, em um recibo de pagamento de empregado, em uma folha de ponto, etc. Para esses casos, existe a função AGORA().

Facílima de usar (não precisa nem de argumentos!), a função retorna a data e a hora atuais no computador em formato numérico, com cada unidade correspondendo a um dia e a parte decimal correspondendo a horas, minutos e segundos. Apesar de simples, é muito usada, por exemplo, no cálculo de horas extras.

O valor retornado por essa função é atualizado automaticamente de forma a apresentar a data e a hora atuais. O problema é que, às vezes, precisamos de registro de data e a hora sem atualização. Essas data e hora armazenadas de forma histórica são conhecidas como “marca temporal” (ou timestamp, em inglês).

Encontrei basicamente três formas de resolver essa dúvida de um leitor: usando macros, usando atalhos de teclado e usando referências circulares. Como não gosto de usar macros (dificultam a portabilidade da planilha entre os diversos aplicativos existentes), este artigo abordará apenas as outras duas opções.

Usando atalhos de teclado

Durante minhas pesquisas, encontrei algumas dicas interessantes de Excel. Entre elas, dois “obscuros” atalhos de teclado que podem resolver nosso problema. Atalhos de teclado são combinações especiais de teclas que, pressionadas ao mesmo tempo, desempenham uma função especial. Alguns, como o Ctrl+Alt+Del e os “trigêmeos” Ctrl+X, Ctrl+C e Ctrl+V, são bem conhecidos.

No Excel (assim como no Calc), se pressionarmos a tecla Ctrl e, antes de soltá-la, pressionarmos a tecla ;, formando o atalho Ctrl+;, é inserida a data na célula corrente. De forma semelhante, o atalho Ctrl+: insere a hora atual na célula corrente.

Esses dois atalhos de teclado são simples e práticos, mas sujeitam a planilha a erros de preenchimento por dependerem de uma ação do usuário. Portanto, pode ser interessante que a marca temporal seja incluída de forma automática e que seu conteúdo seja protegido contra alterações acidentais.

Usando referências circulares

Uma das razões porque as planilhas são ferramentas tão poderosas é a sua capacidade de organizar e processar um grande número de informações de forma fácil e rápida, especialmente em suas versões eletrônicas. Em consequência disso, quase todas as fórmulas em uma planilha fazem referência aos valores presentes em outras células. Entretanto, quando uma fórmula, direta ou indiretamente, faz referência ao valor contido em sua própria célula, ocorre a chamada “referência circular”.

Quando surgiram, as planilhas eletrônicas não eram capazes de lidar com referências circulares: como calcular o valor de uma célula se o seu resultado é um dos parâmetros necessários para efetuar o cálculo? Atualmente, as planilhas eletrônicas conseguem resolver esse impasse mas, como uma referência circular, na maioria das vezes, ainda significa um erro na fórmula, essa funcionalidade vem desabilitada por padrão.

Para resolver o nosso problema, primeiro precisamos habilitar essa funcionalidade, normalmente localizada no menu Ferramentas:

Planilha Eletrônica Instruções
MS-Excel (até a versão 2007) Menu Ferramentas > Opções… > Aba Cálculos > Iterações
MS-Excel (a partir da versão 2007) Botão Office > Opções Excel > Fórmulas > Iterações
LibreOffice (Openoffice.org ou BrOffice) Menu Ferramentas > Opções… > LibreOffice Calc > Calcular > Referências Iterativas

Para resolver referências circulares, as planilhas efetuam os cálculos de forma iterativa (repetida). A cada execução, os valores das células a cada execução são usados como parâmetros para a execução seguinte. A fim de evitar execuções infinitas, o processo é interrompido após um determinado número de iterações ou quando os resultados sofrerem pouca alteração a cada iteração, o que ocorrer primeiro. No momento, basta selecionar a opção Iterações, os demais parâmetros são adequados aos nossos propósitos.

Agora que o tratamento de referências circulares foi ativado, podemos retornar ao nosso problema com uma fórmula de timestamp que encontrei. A exibição de uma marca temporal pode ser reduzida à seguinte questão:

Se a célula não estiver preenchida, receberá a data e hora atuais. Se estiver, permanecerá como está.

Partindo dessa definição, podemos imaginar uma planilha com duas colunas. À medida que valores são inseridos na coluna A, a marca temporal é registrada na coluna B. Nesse caso, a fórmula para a célula B2 seria algo como:

= SE( A2 <> ""; SE( B2 = ""; AGORA(); B2 ); "" )

Basicamente, são duas funções SE() aninhadas: a primeira verifica se um valor foi digitado na coluna A, a segunda faz uma referência circular ao atribuir o conteúdo da célula B2 à própria célula B2. Como o valor da função AGORA() só é avaliado quando a célula não possui um valor inicial, obtemos uma marca temporal, avaliada apenas uma vez, na atribuição inicial.

Agora não parece tão complicado, não é? :wink:

22 comentários sobre “Como obter uma marca temporal (timestamp) no Excel

    • Obrigado, Zé! Para mim, a função AGORA() é uma velha conhecida. Mas o timestamp é novidade.

      Mais uma vez, uma pergunta feita por um leitor termina contribuindo para o aprendizado de todos, inclusive o meu!

  1. Agradeço muito sua atenção e as informações sobre o timestamp e funções da data dinâmicas. Já estão aplicadas. Solicitaria sua ajuda agora para um problema, que estou ha 3 dias em cima, e não obtive solução. Trata-se do uso de Vinculos.
    Tenho uma planilha onde inputam-se os dados que está localizada num local fixo com path= u:\users\helpdesk\dados_input.xls.
    Tenho outra planilha que consulta os dados desse arquivo (dados_input.xls) e gera relatorios.
    Essa outra planilha de consulta, estará localizada em OUTRO drive da rede e sera usada por varios usuarios.
    O problema é que, quando abre-se a planilha de consulta, dinamicamente, os paths de vinculos passam a apontar para o drive onde está a planilha de consulta e, logicamente, não acha nada.
    Ja fiz varios testes sem sucesso. Tem como fixar na planilha de consulta essas linhas que contem os paths de vinculo?
    obgd

    • Americo,

      Salvo engano, as planilhas tentar recuperar os dados a partir do endereço acessado durante a criação dos vínculos. Sendo assim, os vínculos precisam ser criados usando o caminho pelo qual a planilha de dados (dados_input.xls) ficará acessível a todos.

      Pela sua descrição, parece que você a acessa por meio de um drive de rede. Sugiro certificar-se que essa pasta está compartilhada com as permissões corretas para todos, mesmo aqueles que vão apenas consultá-la.

      Sugiro também experimentar fazer o vínculo usando um caminho de rede (p. ex. \\nome-do-servidor\helpdesk\dados_input.xls) e não um drive de rede.

  2. Depois de 3 horas procurando por uma solução que não envolvesse macro, finalmente encontrei uma dica espetacular. Muito obrigado.

    • Reinaldo, você não sabe como fico feliz em ver comentários como esse! É bom ver que consegui ajudar alguém.

      Principalmente depois de eu ter passado pelo mesmo sufoco de procurar por uma solução que não envolvesse macros… :wink:

  3. Cara … espetacular, eu ja estava desistindo de usar a função AGORA sem atualização …. e como vc mesmo disse … muito simples!!!

  4. Como faço para MANTER a configuração de Iteração do Excel ativada, para que outros usuários acessem pela Rede, e mesmo estando desabilitado em seus computadores, TORNAR ativa essa configuração para que quando acessarem de suas estações funcionarem automaticamente a ITERAÇÃO?

    • Miriam, no momento, não tenho um Excel disponível aqui para testes, mas pelo menos no LibreOffice Calc, quando você marca a opção e grava a planilha (tanto no formato .ODS, quanto no formato .XLS), ao ser carregada novamente, ela ativa a configuração automaticamente.

      Seguindo a política da simplicidade, repita esse teste no Excel e me informe se funcionou. Ok?

      Agora, se preferir o uso de macros, pelo que vi em um fórum da Microsoft, no Excel pode ser necessário o uso do seguinte trecho de código:

      Private Sub Workbook_Open()
          With Application
              .Iteration = True
              .MaxIterations = 1000
              .MaxChange = 0.0001
          End With
      End Sub
    • Miriam, segundo a última resposta no tópico da Microsoft que mencionei, o código acima não funciona.

      In case anyone is still searching…

      I tried the VBA/macro solution, which ultimately did not work. But I found what turned out to be my problem. My personal.xls file had iteration turned off. So no matter what file I opened, my personal.xls template loaded first, turning iterations off, regardless of what the macro told it to do.

      To fix (assuming your personal.xls is normally hidden): In menu/ribbon go to View, then click Unhide. When the box pops up, select PERSONAL and hit OK. This will unhide your personal.xls workbook. Then go to Office Button/Excel Options/Formulas and click “Enable iterative calculation.” If you have serious circular calculations, you may want to up the Maximum Iterations to something like 10,000.

      Sendo assim, a forma correta seria marcar opção de cálculo iterativo com a planilha desejada aberta, gravando-a em seguida.

      • Certo, na minha estação de trabalho a configuração de Iteração está ativada, mas quando tenta abrir em outra estação de trabalho em que não estiver ativa esste recurso, a pPanilha desativará o recurso, de acordo com a configuração da máquina, não permitindo que a Referência Circular funcione adequadamente. Queria que quando abrisse em outra máquina funcionasse automaticamente este recurso de Iteração, porque o padrão do Excel é estar desativada.

        • Eu experimentei aqui (no LibreOffice e no Excel) gravar uma planilha com a configuração ativada e abri-la em outra máquina e funcionou bem.

          Mas, no Excel, tem um porém: se o programa estiver aberto com a opção desmarcada e abrir a planilha preparada por nós, a marcação não ocorre. Parece que a marcação da planilha só influencia o programa quando ela é aberta diretamente (por duplo clique, por exemplo).

  5. Olá! Excelente a formula. Agora estou com um problema a aplicar: ela funciona muito bem, mas altera a data e hora sempre que altero alguma coisa numa outra célula, mesmo que não seja uma das células a que a formula está vinculada…

    • Olá, Duarte! Obrigado, fico feliz em ajudar.

      Com relação à sua dificuldade, não entendi: aqui a fórmula funciona bem (depois de ativar as referências circulares, no menu Ferramentas, claro) e não é atualizada quando outra célula sofre alteração.

      Tem certeza que ativou as referências circulares? E a atualização automática da planilha, está ativada?

      Pode me dar mais detalhes?

    • José, estou com o mesmo problema. Fiz o que pediu porém está errado.. Faço um lançamento na linha A2 por exemplo e depois faço outro na linha A3, então a hora referente a linha A2 muda e fica igual a A3..É como se a última fórmula que se altere, mudasse todas as outras anteriores..Pode me ajudar?

    • Ariane, acho que não entendi sua dúvida: o artigo explica justamente com a função AGORA().

      Para aparecer apenas a data, basta mudar a formatação da célula…

Deixe um comentário: