Ir ao conteúdo
  • Cadastre-se

Macro qua soma as horas trabalhadas


Strikethrough

Posts recomendados

Boa noite.

Preciso de ajuda para terminar uma macro.

A planilha:

http://www.4shared.com/document/UJ6v-Grg/Relatorio_Loja.html

Essa é a estrutura da planilha pronta. Eu peguei parte da planilha original e montei essa no Excel, como são poucas linhas dá pra fazer manual. A original e que eu preciso trabalhar tem milhares de linhas, e a coluna "TOTAL HORAS TRABALHADAS" está em branco, eu preciso preencher ela de forma que fique como no exemplo.

O meu problema é com os casos como o do funcionário 8 da loja 02 no dia 02/01. Minha macro soma as horas das duas primeiras linhas (vermelho + verde) e aponta o resultado (amarelo) na linha 2. Depois soma o valor da segunda (verde) com a terceira (azul) linha, e traz o resultado na terceira (cinza) linha, mas o resultado da linha 3 não está adicionado a hora da linha 1.

As informações a serem tratadas começam na linha 4 da planilha e vou ter casos de mais de 3 horários a somar.

A macro:

Sub SomadeTempo()

Dim cx1, cx2, cx3 As Integer

Dim dataS1, dataR1, dataS2, dataR2 As Date

Dim cont1, cont2, Num As Long

Dim loja1, loja2, loja3 As String

cont2 = 5

cont3 = 6

Num = ActiveSheet.Range("B65536").End(xlUp).Row

For cont1 = 4 To Num

loja1 = [Plan1].Cells(cont1, 1)

loja2 = [Plan1].Cells(cont2, 1)

loja3 = [Plan1].Cells(cont3, 1)

cx1 = [Plan1].Cells(cont1, 2)

cx2 = [Plan1].Cells(cont2, 2)

cx3 = [Plan1].Cells(cont3, 2)

datasaida1 = [Plan1].Cells(cont1, 3)

datasaida2 = [Plan1].Cells(cont2, 3)

datasaida3 = [Plan1].Cells(cont3, 11)

dataretorno1 = [Plan1].Cells(cont1, 13)

dataretorno2 = [Plan1].Cells(cont2, 13)

dataretorno3 = [Plan1].Cells(cont3, 13)

If (loja1 = loja2) And (cx1 = cx2) And (datasaida1 = datasaida2) And (dataretorno1 = dataretorno2) Then

Hora = ([Plan1].Cells(cont1, 7)) - ([Plan1].Cells(cont1, 5))

Hora2 = ([Plan1].Cells(cont2, 7)) - ([Plan1].Cells(cont2, 5))

[Plan1].Cells(cont2, 9) = Hora + Hora2

End If

If (loja2 = loja3) And (cx2 = cx3) And (datasaida1 = datasaida2) And (dataretorno2 = dataretorno3) Then

Hora3 = ([Plan1].Cells(cont3, 7)) - ([Plan1].Cells(cont3, 5))

[Plan1].Cells(cont3, 9) = Hora + Hora2 + Hora3

End If

cont2 = cont2 + 1

cont3 = cont3 + 1

Next

End Sub

Gostaria que me ajudassem a resolver este problema.

Desde já eu agradeço.

Link para o comentário
Compartilhar em outros sites

Ve se essa planilha que eu fiz te atende:

modelo horas trabalhadas.xlsx

Eduzsrj, obrigado pela atenção e pela tentativa de ajuda.

Não precisa ser via código. A planilha funciona sim, mas tem um pequeno detalhe: a empresa que trabalho é meio complicada, então o máximo que vou conseguir é trabalhar com a versão 2000 do Office. É, fica difícil, eu sei.

Outro fator é que preciso retornar os valores na coluna "Total de Tempo de trabalho", por que planilha original tem milhares de linhas com o histórico de meses de informações. Basicamente eu preciso saber quantas horas um funcionário trabalhou em um determinado dia ou em um período, mas preciso levar em consideração que precisarei visualizar todo o histórico do funcionário na mesma pasta.

E como faço para estender os cálculos para os outros funcionários? ou para o mesmo funcionário em outra data?

Obrigado.

Link para o comentário
Compartilhar em outros sites

para incluir outras datas ou outros funcionarios é so fazer um CTRL+C + CTRL+V nas planilhas ai é so ir trocando os dados etc.

na planilha relatorio você entra com o funcionario e a data e ela soma o total de horas

so nao sei se estas funcoes tem na versao 2000 do excel

se a planilha servir veja o que você precisaria modificar nela pra q possa ajudar

se nao servir ai teremos q pensar num solucao via macro

Link para o comentário
Compartilhar em outros sites

Eu não achei essa função no Office 2000, pelo menos não com o mesmo nome.

E eu dei uma vacilada legal também (pessoal por favor me perdoe) acabei de ver uma coisa: eu esqueci de colocar uma coluna de referência, antes do nome do funcionário vem a Loja em que ele trabalha.:muro::muro::muro::muro::muro:

Eu vou editar o primeiro post.

Desculpe. (em um laço "for" que começa com contador 1 e termina quando o contador atingir o valor infinito).

Link para o comentário
Compartilhar em outros sites

o que voce precisa afinal:

voce que um relatorio com o total de horas de cada funcionario em um dia?

Um relatorio com todas as horas de um funcionario em um período (dia inicio dia vim)?

voce quer apenas poder consultar, dado um funcionario, a quantidade de horas trabalhadas em um dia e/ou período?

etc etc

Link para o comentário
Compartilhar em outros sites

Eu preciso que na coluna "Total Horas Trabalhas" apareça o total de horas trabalhadas em um dia de cada funcionário.

O resto das informações eu vou conseguir através de filtros, só preciso preencher a coluna "Total Horas Trabalhadas".

O exemplo é o funcionário 5, trabalhou das 07:00 às 11:00, fez uma pausa e trabalhou das 13:00 às 14:00. o primeiro período trabalhou 04:00 horas (H5) e no segundo 01:00 hora (H6), total 05:00 horas trabalhadas (I6).

Link para o comentário
Compartilhar em outros sites

É como está na planilha, só que na planilha já está a informação de vários dias.

Basicamente, a rotina é o funcionário abrir um caixa e começar a trabalhar nele. Se ele precisa parar o seu trabalho, bloqueia o caixa e o sistema registra que o caixa parou de atender. Quando ele volta, o sistema registra a hora que o caixa reabriu, registrando uma nova informação quando o caixa for bloqueado novamente ou for finalizado definitivamente. Isso acontece com todas as lojas, o sistema é corporativo e todos os dados, de todas as lojas, são centralizadas em um único banco.

Posteriormente, eu posso acessar todos esses dados, de um único dia ou de um período. A planilha tem a informação de um período. O que eu quero é somar quantas horas o funcionário ficou trabalhando naquele caixa no dia, não importa se ele não parou ou se parou 10 vezes.

EDIT: resolvi o problema quando há 3 pausas ou menos, mas preciso ampliar a soma para 4 ou mais pausas.

Link da planilha reeditada: http://www.4shared.com/document/XsmCFpIU/Relatorio_Loja2.html

A macro soma a linha 1 (vermelho) com linha 2 (verde) o resultado aparece na linha 2 (amarelo). Como o próximo registro ainda é do funcionário 8 no dia 4, a macro soma a linha 1(vermelho), a linha 2 (verde) e a linha 3 (azul) e mostra o resultado na linha 3 (cinza). O próximo registro ainda é do funcionário 8, mas não estou conseguindo somar a linhas1 (vermelho), 2(verde), 3 (azul) e 4 (preto) e mostrar o resultado na linha 4 (laranja). E se o quinto registro ainda fosse do funcionário 8, teria que somar os valores de todas as linhas anteriores à linha 5 e motrar o resultado na linha 5.

Quem puder, me ajude por favor.

Link para o comentário
Compartilhar em outros sites

e o que falta em relação a planilha que postei? ela soma as horas trabalhadas de um funcionario e dia especificados.

É s´´o voce fazer o CTRL+C e CTRL+V e ir mudando os funcionarios e dias, na priemira planialha.

Copie sempre a linha inteira para as linhas em branco embaixo pra que as formulas sejam copiadas corretamente, em seguida é so deletar ou sobrescrever os nomes datas e horarios,.

Link para o comentário
Compartilhar em outros sites

ah ta ehehehehe

nesse caso vamos então usar a SOMASE, mas precisaremos criar um artificio para isso

veja a planilha

modelo horas trabalhadas só SOMASE.xlsx

voce pode ocultar as colunas de calculo pra planilha ficar bonitinha

E lembre-se copie sempre a linha inteira de cima até umas 100 ou 1000 linhas abaixo, pra ter sempre as formulas delas e nao dar erro.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Boa noite Strikethrough

Tentando contribuir.

Se por acaso o Excel 2000 não tiver a função SOMASE você poderá usar a função SOMARPRODUTO que substituí as funções SOMASE, SOMASES, CONT.SE e CONT.SES nas funções anteriores ao 2007.

Aproveitando a planilha do colega eduzsrj você poderá substituir a fórmula da coluna D da planilha relatório por esta aqui :

=SE(OU(A2="";B2="");"";SOMARPRODUTO((Registros!$J$2:$J$1000=C2)*(Registros!$K$2:$K$1000)))

Dê retorno.

Um abraço

Link para o comentário
Compartilhar em outros sites

Boa noite Patropi

Sua fórmula também funciona sim, mas dá um erro e o Office corrige automaticamente.

Eu vou ver se funciona no Office 2000 amanhã, por hoje muito obrigado pela ajuda de vocês dois.

Apenas mais uma dúvida, tem como mostrar soma das horas trabalhadas em horas, em vez de número?

Obrigado.

Link para o comentário
Compartilhar em outros sites

dá pra mostrar as horas e os minutos em colunas separadas

assim para horas: =INT(célula_número)

assim para os minutos: = (célula_número - célula_horas) * 60

mostrar em formato de hora: =VALOR.TEMPO(célula horas & ":" & célula minutos)

(formartar a célula como hora 00:00)

Não da pra apresentar como horas (conforme acima) porque se passar de 24 horas de trabalho vai dar erro.

Link para o comentário
Compartilhar em outros sites

Perfeito, perfeito, muitíssimo obrigado pela ajuda; as fórmulas funcionaram no MS Office 2000, está tudo ok.

A macro está funcional, mas ainda está imperfeita. Ela roda até um certo limite de registros e depois para procurar mais eu tenho que adicionar linhas de programação. Vou abrir outro tópico pedindo para me ajudarem a melhorá-la, vou precisar simplificá-la para outra planilha.

Este problema está resolvido, mais uma vez muito obrigado pela ajuda.

Pode fechar o tópico.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!