quarta-feira, 20 de junho de 2007

Manipulando datas e horas no Excel

Este artigo tem o objetivo de mostrar ao leitor um pouco sobre a manipulação de datas e horas no Excel.

Este artigo assume um conhecimento prévio de como datas e horas são manipuladas no Excel. Se você ainda tem alguma dificuldade nesta área este módulo de treinamento certamente é o que você precisa para compreender esta área ainda obscura do Excel. Além de cobrir todos os tipos de manipulações com datas e horas na planilha o leitor ainda aprenderá a usar o VBA para criar funções que não existem no Excel, mas são muito requisitas pelos mais variados níveis de usuários.

Uma dúvida que sempre surge nos usuários de Excel é como subtrair, por exemplo, 176:00:00 de 150:00:00. Aqui temos uma situação interessante. Como é explicado no Treinamento, não existe 176 horas ou 150 horas para o Excel. O que existe são 176/24 e 150/24 (7,33 dias e 6,25 dias respectivamente). Novamente, o que ocorre é que podemos formatar 7,33 para mostrar 176:00:00 ou até mesmo digitar o valor 176 (o qual representaria 176 dias e não 176 horas).

Para mostrar o número total de horas, basta utilizar o seguinte formato: [h]:mm:ss. Os colchetes instruem o Excel a mostrar o somatório das horas ao invés da fração do primeiro dia fracionado.

Ao tentar subtrair 176 horas de 150 horas o valor retornado é negativo. No sistema de datas 1900 isso não é válido. Ao modificar para o sistema 1904 é possível subtrair uma hora maior de uma menor. Neste caso específico ao efetuarmos a subtração 150–176 obtemos –26 horas. Se os valores se encontram neste formato a outra opção e "envelopar" a subtração na função ABS: =ABS(150:00:00-176:00:00)

Novamente, embora a formatação mostre claramente as 26 horas, este não é o valor efetivamente utilizado pelo Excel para efetuar os cálculos. Observe, contudo, que você poderia ter simplesmente feito a seguinte conta: =176:00:00-150:00:00, para obter 26 horas sem a necessidade de complicar o problema.

A função ABS funciona bem neste exemplo porque não estamos preocupados com a direção das horas. Veja que ao declarar 176 horas estamos dizendo ao Excel que este valor equivale a 7,33 dias.

Imagine uma pessoa que trabalha no turno da noite em um supermercado. Se esta pessoa inicia o trabalho às 21 horas e sai às 5 horas da manhã do dia seguinte, a direção da contagem das horas começa a fazer uma diferença. Como queremos saber o número de horas trabalhadas entre o horário de entrada e saída, efetuaríamos o seguinte cálculo: =05:00:00-21:00:00

Ao efetuar este cálculo obtemos um erro, pois o resultado é negativo e o sistema 1900 não suporta valores negativos. Ao utilizarmos a função ABS para envelopar a diferença, obtemos um resultado; porém, incorreto. Veja que ao passar o resultado para valor absoluto, a diferença é invertida (21-5=16). Mas sabemos que das 9PM às 00:00AM existem 3 horas e das 00:00AM às 05:00AM existem 5 horas, totalizando 8horas trabalhadas. Então, como resolver este problema?

A figura abaixo mostra dois métodos para resolver a questão:


Figura 1

No primeiro exemplo, estamos avaliando se a condição é verdadeira ou falsa. Se for falsa ela retorna o valor na célula B1 e a subtração B1-A1 é feita sem problemas. Se for verdadeira, o Excel retorna B1+1 e a subtração efetuada (B1+1)-A1, retornando o número correto de horas trabalhadas entre os dois períodos. Neste último caso, estamos acrescentando 24 horas para que o resultado leve em conta a mudança de um dia para o outro.

Pare um segundo para avaliar o que esta ocorrendo aqui... Parou? Pensou? Entendeu? Agora, imagine que esta pessoa iniciou o trabalho no dia 01/07/2004 às 21:00:00 e saiu do trabalho no dia 02/07/2004 às 5 da matina. Todos os cartões de ponto que já vi em Excel, o formato é o seguinte:


Figura 2

A fórmula funciona que é uma maravilha, pois a pessoa entrou num dia e saiu no outro. Como poucas pessoas trabalham mais de 24 horas sem parar, o método acima não apresenta problemas, mas se você precisa avaliar o número de horas que uma máquina ficou em funcionamento, por exemplo, você tem que ajustar a fórmula para levar em conta o número de dias, pois a diferença será negativa. Imagine, então, que a máquina começou a rodar às 21:00:00 do dia 01/07/04 e somente parou no dia 04/07/04 às 05:00:00.

Utilizar a função MOD não resolve, pois ela retorna o resultado dentro das primeiras 24 horas. A solução é adaptar o exemplo utilizando a função SE, como segue: =SE(C3

Como a máquina rodou o dia todo nos dias 2 e 3/07/04 mais as três horas do primeiro dia e mais cinco horas do quarto dia, temos um total de horas de: 3+24+24+5, isto é, 56 horas rodando sem parar. O valor verdadeiro precisa ser adicionado a três, pois 1 é para as primeiras 24 horas e 2 para os dois dias rodados por completo.


Figura 3

Se você realmente “parou”, “pensou” e “entendeu”, você deve ter notado que esse monte de fórmulas é completamente loucura! Por quê? Simples, muito simples. Imagine se você tivesse que adaptar sua fórmula toda vez que houvesse este tipo de variação nas datas!?

A menos que você tenha uma excelente razão para separar a data das horas, coloque tudo junto! Veja o exemplo abaixo:


Figura 4

Como a data e as horas são entradas na mesma célula ao efetuar as diferenças é desnecessário aquele monte de fórmulas espalhafatosas que vocês devem ver por muitos livros por aí e até mesmo as fórmulas mostradas anteriormente.

É bem provável que você tenha gostado do método apresentado, mas tenho certeza que você dirá que mesmo assim precisa da data separadamente.

O Excel possui uma tremenda flexibilidade de formatação de datas e horas (que são discutidas no Módulo de Treinamento). Pois bem, podemos utilizá-las para eliminar a data no exemplo acima e em outra célula utilizar os mesmos valores na formatação de datas:


Figura 5

Aqui, a célula A2 é igual a célula B2 e a célula A3 é igual a célula C2. As células B2 e C3 contêm a data e horas dos dias em questão, porém ambas estão formatadas para mostrar apenas as horas. Já a coluna A está formatada para mostrar apenas a data. Não obstante, os valores efetivamente nas células continuam sendo 01/07/04 21:00:00 e 04/07/2004 05:00:00 em todas as quatro células.

Uma maneira simples, limpa, elegante e eficaz de resolver o problema.

A próxima pergunta óbvia sobre este método é ter que digitar 01/07/2004 21:00:00 na célula em questão, mas se estamos interessados em saber a data e hora neste exato momento podemos utilizar o VBA junto com a função Agora (que em VBA é a função Now) para fazer isso e não perdemos tempo com longas digitações de datas. Ou ainda utilizar atalhos de teclado para isso.

A parte de VBA é discutida em detalhes no Módulo de Treinamento.

Se subtrair é um pouco complicado, somar é bem mais descomplicado. Como o Excel automaticamente formata as horas para hh:mm:ss, quem já tentou somar horas descobriu que o somatório aparece “errado”. Na verdade, ele não está errado. O formato está correto, mas a formatação que possibilita tal visualização é que está incorreta.

Como explicado anteriormente, para mostrar horas acima de 24 horas com a visualização que esperamos basta colocar a parte referente às horas (h) entre colchetes. O exemplo da subtração de horas faz exatamente isso, caso contrário, o valor visual da célula seria diferente.

Dito isso, o somatório de horas passa a ser uma tarefa bem fácil, como mostra a figura abaixo:


Figura 6

Todas as horas vistas nesta parte referem-se as horas inteiras. Se você utilizar a função de planilha Agora o Excel colocará a data, hora, minutos e segundos na célula selecionada. Contudo, talvez não seja bem isso que você queira fazer.

Se você coleta informações sobre carros que entram e saem da garagem de seu edifício, é provável que tal precisão seja necessária. Mas, e se estamos avaliando um cartão de ponto? Neste caso, é presumível que você queira trabalhar com horas inteiras ou no máximo frações de horas, como a cada 15 ou 30 minutos.

Vamos supor que a máquina do exemplo anterior iniciou o funcionamento de acordo com a figura abaixo:


Figura 7

Em apenas um dia a máquina iniciou no minuto cravado. Todos os outros dias ela inicia em uma fração de segundo qualquer. Neste exemplo, você deseja arredondar para o minuto mais próximo. Com isso quero dizer que você deixará o Excel decidir se o arredondamento é para cima ou para baixo, tudo que fazemos é dar ao Excel os parâmetros para avaliação.

Como todos nós sabemos, o dia tem 24 horas e em 24 horas temos 1.440 minutos (24horas*60minutos). Com esta informação fica fácil avaliar o problema. Se multiplicarmos os valores observados na coluna A pelo número de minutos em um dia, estamos efetivamente movendo a fração referente aos minutos para a esquerda do decimal. Se arredondarmos este valor para zero casas decimais, estamos arredondando os segundos para cima ou para baixo. O resultado precisa, então, ser divido por 1.440 para retorná-lo para a base correta:


Figura 8

Feito o arredondamento para o minuto, para arredondar para os 15 ou 30 minutos fica fácil. Se observarmos 1.440 minutos em um dia o número de vezes que 15 minutos ocorre em um dia é 1.440/15 ou 96 vezes em um dia. Da mesma forma, 30 minutos ocorre 1.440/30 vezes ao dia (48 vezes). Por analogia, podemos expandir o conceito para qualquer outro tipo de arredondamento, por exemplo, 5 minutos ou 10 minutos.

A figura abaixo mostra o arredondamento da figura anterior para 15 e 30 minutos:


Figura 9

Fonte: http://www.linhadecodigo.com.br/artigos.asp?id_ac=830&pag=1

7 comentários:

Anônimo disse...

como deixar automatico uma aceitar so letras maiusculas, obg

Pedro
pedromoreira2000@gmail.com

Anônimo disse...

como deixar automatico uma célula aceitar so letras maiusculas, obg

Pedro
pedromoreira2000@gmail.com

José Costa disse...

olá boa noite desde de portugal
gostaria que pudesse ajudar com uma formula desde já o meu obrigado
é o seguinte
se eu trabalho das 19:30 ás 7:30 do dia seguinte gostaria que numa célula estivesse o total de horas de trabalho e noutra célula o total de horas nocturnas sendo que estas se situam entre as 20:00 e as 6:00

mais uma vez muito obrigado

Anônimo disse...

Passndo só pra t agradecer....resolveu um problema q ja tava me pegando a um tempo....
Felicidades pra vc meu amigo!!

cotof@ig.com.br

Anônimo disse...

Não funciona no Office 2011

Carlos Stumpo disse...

Caro Sr. Professor,
Recebo uma folha excel contendo durações de chamadas de telefone.
Não consigo manipular chamadas que tenham mais do que 24 min, pois ele guarda algo assim : 01-01-1900 08:24:00.
Neste exemplo a chamada durou 32 min e 24 seg, mas apesar de "mostrar" correctamente a indformação em si e esta que se vê.
O Sr. pode me ajudar nessa solução.
Obrigado,
Carlos Stumpo
cstumpo@sapo.pt

Anônimo disse...

Muito obrigado por ter postado um tema tão recorrente com informações tão úteis!