Notifications
Clear all

Deletar números iguais conforme o pedido

8 Posts
2 Usuários
0 Reactions
1,714 Visualizações
(@ilbeh-morais)
Posts: 51
Trusted Member
Topic starter
 

Boa noite

Em uma lista de tamanho variado (linhas e colunas). A macro identifica na lista, qual o maior nº de ocorrencias de qualquer dezena. Um valor é estipulado para neutralizar aquela(s) dezena(s) que contém o maior numero de casos. Ex.: Se houver sete casos da dezena onze na lista, o valor de corte (delete) for cinco. Então cinco dezenas onze ou outras quaisquer nas mesmas condições, serão deletadas sem posição especifica.

Agradeço a ajuda disponibilizada

 
Postado : 20/04/2012 7:59 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Por favor tire um tempo e lei as regras, na próxima favor postar o arquivo compactado!!

Nossas Regras:
viewtopic.php?f=7&t=203

Me diz uma coisa, e caso você tenha neste intervalo 6 dezenas de número 11, e em H2 o número 5???

Outra pergunta, e caso você tenha neste intervalo 5 dezenas de número 11, e em H2 o número 5???

Att

 
Postado : 21/04/2012 5:33 am
(@ilbeh-morais)
Posts: 51
Trusted Member
Topic starter
 

Bom dia
Alex vba, desculpa a falta de atenção quanto a postagem, conheço as regras. O 5 na célula H2 é tão somente para informar quantos números repetidos terão que sair da lista, esse numero é variável, vai depender da necessidade do usuário. Qualquer numero que estejam fora desse critério (H2) é deletado até atingir o esperado. É isso.

 
Postado : 21/04/2012 6:41 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Faça os teste..

Sub test()
    Dim dic As Object, i As Long, ii As Long, temp
    Dim myLimit As Long, w()
    myLimit = Range("h2").Value
    Set dic = CreateObject("Scripting.Dictionary")
    With Range("h4").CurrentRegion
        For ii = 1 To .Columns.Count
            For i = 1 To .Rows.Count
                temp = .Cells(i, ii).Value
                If Not dic.exists(.Cells(i, ii).Value) Then
                    ReDim w(1)
                    Set w(0) = .Cells(i, ii)
                    w(1) = 1
                    dic(.Cells(i, ii).Value) = w
                Else
                    w = dic(temp)
                    w(1) = w(1) + 1
                    If w(1) = myLimit + 1 Then
                        w(0).ClearContents
                    End If
                    Set w(0) = Union(w(0), .Cells(i, ii))
                    dic(temp) = w
                End If
            Next
        Next
    End With
    Set dic = Nothing
End Sub
 
Postado : 21/04/2012 8:55 am
(@ilbeh-morais)
Posts: 51
Trusted Member
Topic starter
 

Boa tarde

Alexandrevba, meus agradecimentos, a macro ficou muito boa.

Abraço

 
Postado : 21/04/2012 1:39 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Gostaria que fisese todos os teste necessários caso seja realmente isso, então marque seu tópico como resolvido!!

Att

 
Postado : 21/04/2012 1:56 pm
(@ilbeh-morais)
Posts: 51
Trusted Member
Topic starter
 

Boa noite

Meu caro Alex vba, a solução da macro ficou a contento e por isso quero marcar como resolvido

 
Postado : 21/04/2012 5:48 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Eu vou marcar para você, mas veja como fazer isso na próxima.

Marcar Tópico como Resolvido e Agradecimento:
viewtopic.php?f=7&t=3784

 
Postado : 21/04/2012 6:04 pm