Notifications
Clear all

Limpeza de células vazias, código muito lento.

6 Posts
3 Usuários
0 Reactions
1,442 Visualizações
(@pvitor)
Posts: 11
Active Member
Topic starter
 

Existe maneira de deixar esse código mais rápido? Ou algum outro comando otimizado?

Tenho que fazer a limpeza de uma range com mais de 100 mil linhas.

For Each c In sRange
If (c.Value = "") Then c.ClearContents
Next

Obrigado.

 
Postado : 23/06/2016 11:28 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Já tentou:

sRange.SpecialCells(xlCellTypeBlanks).ClearContents

Nesse caso, elimine o loop pois o método SpecialCells seleciona automaticamente todas as vazias.

 
Postado : 23/06/2016 11:43 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

PVitor, seja bem vindo ao Planilhando.

Depois que respondi à seu post fiquei pensando... mas por que cargas d'água ele quer limpar o conteúdo de uma célula que já está vazia? Qual o sentido disso? Porque se c.Value já é = "" então o conteúdo já está vazio e não teria sentido "limpar o conteúdo".

 
Postado : 23/06/2016 11:52 am
(@pvitor)
Posts: 11
Active Member
Topic starter
 

EdsonBR, quando escrevi o código também achei estranho, porém foi a única maneira que consegui realizar o procedimento.

Essa Range contém informações de uma fórmula.

Essa fórmula é referente a uma validação, quando não há o esperado ela preenche a célula com vazio (""). Já tentei copiar o range e colar valores, também não consigo eliminar as células em branco.

Essa validação serve como indicadores para definir ranges de dados.

Os dados são dispostos por dia, e essa fórmula me informa o início de cada dia.

Vou tentar colocar a planilha.

Obrigado

 
Postado : 23/06/2016 12:01 pm
(@edcronos2)
Posts: 346
Reputable Member
 

eu ia indicar array para fazer a limpeza mas como tem formula e tem que lipar pelo valor da formula teria que fazer uma verificação dupla

mas vc pode tentar com value2
For Each c In sRange
If c.Value2 = "" Then c.ClearContents
Next

fora congelar a tela e os recalculo "isso vc deve saber fazer
com array seria mais ou menos assim

ar=sRange.value2
arf=sRange.formulalocal

for c=1 to ubound(ar,2)
    for l=1 to ubound(ar,1)
      if ar(l,c)="" then arf(l,c)=""
    next 
next
sRange.formulalocal = arf
 
Postado : 23/06/2016 12:57 pm
(@pvitor)
Posts: 11
Active Member
Topic starter
 

Edcronos, muito obrigado pela dica do Array.

Agilizou muito o código, o que antes era processado em 10 minutos, está processando agora em alguns segundos.

EdsonBR, obrigado pelas dicas também!

Muito Obrigado.

 
Postado : 24/06/2016 7:00 am