Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
#39252
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
#39257
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.
#39409
osvaldomp escreveu:Disponibilize diretamente aqui no fórum uma amostra do seu arquivo Excel ...
+ Resposta / Adicionar um anexo / Selecione o arquivo
#39460
Bom dia.
Veja se te atende.
Você não está autorizado a ver ou baixar esse anexo.
#39466
Código: Selecionar todos
Sub 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.
#39467
osvaldomp escreveu:
Código: Selecionar todos
Sub 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.
#39468
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 ?
#39469
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.......
#39470
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.
#39472
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......
#39473
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. ;)
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord