Página 1 de 1
Operações com hora - Erro na entrada do IF
Enviado: 12 Dez 2018 às 12:46
por Mamutinho
Boa Tarde,
A rotina abaixo é pra percorrer uma coluna, de um cabeçalho pré-selecionado. Quando a hora da célula for 1seg menor do que a célula debaixo, mando excluir a linha da célula debaixo. Porém, na comparação, mesmo os valores estando iguais e com o mesmo formato, o programa está pulando o IF direto pro ELSE, sem realizar a exclusão da linha.
Sub excl_seq()
Application.ScreenUpdating = False
Dim lin As Long
Dim col As Long
Dim last As Long
Dim seg As Date
Dim x As Date
Dim y As Date
Dim Z As Date
Dim ySheet As Worksheet
Set ySheet = ActiveWorkbook.ActiveSheet
last = ySheet.UsedRange.Rows.Count
lin = ActiveCell.Row
col = ActiveCell.Column
seg = CDate("00:00:01")
With ySheet
While lin < last
x = Cells(lin + 1, col).Value
x = CDate(x)
y = Cells(lin, col).Value
y = CDate(y)
lapos = lin + 1
Z = y + seg
If Z = x Then
.Rows(lapos).Delete
Else
lin = lin + 1
End If
Wend
End With
Application.ScreenUpdating = True
End Sub
https://imgur.com/a/O3CVel4
https://imgur.com/a/9okL7u8
Re: Operações com hora - Erro na entrada do IF
Enviado: 12 Dez 2018 às 15:19
por osvaldomp
Disponibilize diretamente aqui no fórum uma amostra do seu arquivo Excel (imagens não servem), contendo algumas linhas com dados (máximo 10 linhas, ou a quantidade necessária para reproduzir todas as variações possíveis de ocorrer) e marque na própria planilha quais as linhas que você deseja excluir.
Operações com hora - Erro na entrada do IF
Enviado: 19 Dez 2018 às 13:10
por Mamutinho
https://drive.google.com/open?id=1VMo_f ... sUUmIWasz2
Segue o link acima com o arquivo disponível. No caso, teria que excluir as linhas que contém as células em amarelo, onde elas contém 1seg a mais que a linha de cima.
Re: Operações com hora - Erro na entrada do IF
Enviado: 19 Dez 2018 às 15:03
por osvaldomp
osvaldomp escreveu:Disponibilize diretamente aqui no fórum uma amostra do seu arquivo Excel ...
+ Resposta / Adicionar um anexo / Selecione o arquivo
Re: Operações com hora - Erro na entrada do IF
Enviado: 21 Dez 2018 às 09:22
por Mamutinho
Segue anexo
Re: Operações com hora - Erro na entrada do IF
Enviado: 21 Dez 2018 às 09:52
por gfranco
Bom dia.
Veja se te atende.
Re: Operações com hora - Erro na entrada do IF
Enviado: 21 Dez 2018 às 12:56
por osvaldomp
Código: Selecionar todosSub ExcluiLinhas()
Dim k As Long
For k = Cells(Rows.Count, 3).End(3).Row - 1 To 2 Step -1
If Format(Cells(k + 1, 3) - Cells(k, 3), "hh:mm:ss") = "00:00:01" Then Rows(k + 1).Delete
Next k
End Sub
obs. você marcou a linha 13 em amarelo para ser excluída, porém ela não se enquadra no critério.
Re: Operações com hora - Erro na entrada do IF
Enviado: 21 Dez 2018 às 13:09
por gfranco
osvaldomp escreveu:Código: Selecionar todosSub ExcluiLinhas()
Dim k As Long
For k = Cells(Rows.Count, 3).End(3).Row - 1 To 2 Step -1
If Format(Cells(k + 1, 3) - Cells(k, 3), "hh:mm:ss") = "00:00:01" Then Rows(k + 1).Delete
Next k
End Sub
obs. você marcou a linha 13 em amarelo para ser excluída, porém ela não se enquadra no critério.
Apesar de apreciar os loop's eu penso que uma única ação de exclusão exibe uma performance melhor.
Re: Operações com hora - Erro na entrada do IF
Enviado: 21 Dez 2018 às 13:18
por osvaldomp
gfranco escreveu:Apesar de apreciar os loop's eu penso que uma única ação de exclusão exibe uma performance melhor.
Quais foram os tempos de execução dos dois códigos ?
Re: Operações com hora - Erro na entrada do IF
Enviado: 21 Dez 2018 às 13:43
por gfranco
osvaldomp escreveu:gfranco escreveu:Apesar de apreciar os loop's eu penso que uma única ação de exclusão exibe uma performance melhor.
Quais foram os tempos de execução dos dois códigos ?
Aumentando-se a base para 500 linhas (à fim de obter volume de trabalho) a exclusão única ocorreu no mesmo segundo do disparo da macro, já a exclusão linha a linha demorou 1 segundo para executar ( o dobro do tempo).
Numa base pequena eu realmente acredito que não será sensível a diferença de tempos de execução....já numa base robusta eu iria preferir a exclusão única.......
Re: Operações com hora - Erro na entrada do IF
Enviado: 21 Dez 2018 às 14:04
por osvaldomp
A solução que eu sugeri (um código enxuto, fácil para ser lido, fácil para ser entendido, fácil para ser ajustado/modificado no futuro,, fácil de ser aproveitado por outros usuários), foi com base no tamanho da tabela disponibilizada, e até aqui não temos a informação que a tabela poderá conter 500 ou mais linhas.
E, mesmo sem desativar a atualização de tela, que entendo desnecessária neste caso, a diferença de tempo de execução em relação ao seu código é "realmente imperceptível" na tabela disponibilizada, como você constatou.
Operações com hora - Erro na entrada do IF
Enviado: 21 Dez 2018 às 14:14
por gfranco
Caro colega Osvaldo.
Eu não quis, em nenhum momento, desmerecer a solução por você apresentada... até porque reconheço-te como um programador da mais alta qualidade.
Creio que esbarramos aqui em preferências de cunho pessoal e, assim sendo, acho que ambas as soluções propostas são equivalentes entre si.....
Espero, realmente, que não tenhas me interpretado mal......
Re: Operações com hora - Erro na entrada do IF
Enviado: 21 Dez 2018 às 14:26
por osvaldomp
Tranquilo, Giovani.
Os fóruns oferecem essa oportunidade de múltiplas sugestões, assim o autor do tópico poderá testar e adotar a que mais lhe convier.
Ainda, as sugestões ficam disponíveis para as buscas pela Internet e uma dada solução pode ser mais conveniente para alguns e outra solução poderá ser mais interessante para outros.
