Notifications
Clear all

Poque esta demorando muito pra calcular?

9 Posts
4 Usuários
0 Reactions
1,792 Visualizações
willianrc
(@willianrc)
Posts: 0
Trusted Member
Topic starter
 

Olá galerinha , Poque está demorando muito pra calcular minha planilha? Alguém sabe me dizer, explicar ? Porque eu preciso colar milhares de códigos e está demorando muito, alguém tem alguma ideia de melhoria ou nova formula?
Obs. Por favor sem macros,vba etc.

Obrigado...
Segue a planilha ai...

 
Postado : 30/03/2018 2:15 am
deciog
(@deciog)
Posts: 0
Trusted Member
 

willianrc, Bom Dia.

Primeiro, quando usa gerecimento de nomes, torna a função matricial, todas funções matriciais são lentas.

Quando você coloca A:A a função pega da célula A1 até 1.048.576 linhas, isso é muita informação para calculo, o ideal é colocar A1:A50000 que é menor ou dinamicamente, conforme crescimento da planilha.

Alterei a formula para não matricial, confere, ficou um pouco mais rápido, ainda muita informação.

Coloquei na formatação condicional quando for igual a zero pinta de branco a fonte, confere

Se foi útil, clique na mãozinha que fica do lado da ferramenta Citar, é uma forma de agradecimento

Se você Visitante Também gostou e foi útil pode clique na mãozinha que fica do lado da ferramenta Citar, é uma forma de agradecimento

Decio

Marque o tópico como Resolvido se foi solucionado seu problema.
Brasil, São Paulo - SP
Décio Gassi

 
Postado : 30/03/2018 5:57 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

.
A sugestão do Deciog ainda ficou um pouco pesada ...
.
Assim fica super leve !!
.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/03/2018 8:18 am
willianrc
(@willianrc)
Posts: 0
Trusted Member
Topic starter
 

Ola Decio agradeço por ter respondido,
No caso ainda continua muito demorado, porque geralmente na coluna A eu colo em media 10 mil códigos (sendo códigos iguais e únicos) , e esse processo de separação esta muito demorado!!!! valeu ai, se souber outra forma.

 
Postado : 30/03/2018 8:31 am
willianrc
(@willianrc)
Posts: 0
Trusted Member
Topic starter
 

JSCOPA interessante seu método, mas vi que quando existe 2 ou mais valores iguais ele coloca 0 pra todos, se apenas 1 código repetido tivesse com o 1 estaria Perfect. se souber outra forma.

 
Postado : 30/03/2018 8:57 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

.
willianrc, vc viu o arquivo antes da correção ... veja novamente!!
.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/03/2018 9:51 am
willianrc
(@willianrc)
Posts: 0
Trusted Member
Topic starter
 

JSCOPA Perfeito ! Thank you very much.

 
Postado : 30/03/2018 10:19 am
(@srobles)
Posts: 231
Estimable Member
 

willianrc,

Experimente adicionar um módulo á sua pasta de trabalho, copie e cole :

Dim listaCodigos() As String
Sub filtrarCodigos()
    With ThisWorkbook.Sheets("Plan1")
        Dim linhaAtual As Long
        Dim linhaFinal As Long
        
        linhaAtual = 2
        linhaFinal = Cells(Rows.Count, 1).End(xlUp).Row
        
        Range("A2").Select
        Range(Selection, Selection.End(xlDown)).Select
        With ActiveWorkbook.Worksheets("Plan1").Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("A2"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With ActiveWorkbook.Worksheets("Plan1").Sort
                .SetRange Range("A2:A" & linhaFinal)
                .Header = xlNo
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
        Range("A1").Select
        Range("F2").Select
       
        Range(Selection, Selection.End(xlDown)).ClearContents
        
        ReDim listaCodigos(linhaFinal)
        
        While linhaAtual <= linhaFinal
            Cells(linhaAtual, 1).Select
            If Cells(linhaAtual, 1) <> "" Then
                If Cells(linhaAtual, 1) <> Cells(linhaAtual + 1, 1) Then
                    listaCodigos(linhaAtual) = Cells(linhaAtual, 1)
                    linhaAtual = linhaAtual + 1
                Else
                    While Cells(linhaAtual, 1) = Cells(linhaAtual + 1, 1)
                        linhaAtual = linhaAtual + 1
                    Wend
                    Cells(linhaAtual, 1).Select
                    listaCodigos(linhaAtual) = Cells(linhaAtual, 1)
                    linhaAtual = linhaAtual + 1
                End If
            End If
        Wend
        
        Dim contCodigos As Long
        contCodigos = 0
        For vCodigo = 1 To UBound(listaCodigos)
            If listaCodigos(vCodigo) <> "" Then
                Dim novaLinha As Long
                novaLinha = Cells(100000, 6).End(xlUp).Row + 1
                Cells(novaLinha, 6) = listaCodigos(vCodigo)
                contCodigos = contCodigos + 1
            End If
        Next
        Cells(1, 7) = contCodigos
    End With
End Sub

Execute a macro e veja se realiza o resultado esperado. Todavia, peço desculpas por disponibilizar uma macro e não uma fórmula / função conforme solicitado.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 30/03/2018 10:21 am
willianrc
(@willianrc)
Posts: 0
Trusted Member
Topic starter
 

srobles testei tambem deu super certo, boa alternativa.

 
Postado : 30/03/2018 10:49 am