Notifications
Clear all

Total de registros únicos após filtro de tabela

3 Posts
1 Usuários
0 Reactions
859 Visualizações
(@rodolfohms)
Posts: 13
Active Member
Topic starter
 

Boa tarde, amigos.

É o seguinte: tenho um conjunto de dados formatados como tabela que são gerados após informar alguns critérios num form. Após serem gerados preciso contar o total de registros não únicos. Para isso utilizei numa célula a fórmula =SOMA(SE(FREQÜÊNCIA(CORRESP(B14:B2000;B14:B2000;0);CORRESP(B14:B2000;B14:B2000;0))>0;1)). Ela até funciona, porém se houver células vazias no intervalo não dá certo. Outro problema é que após filtrar os dados da tabela o resultado da fórmula permanece o mesmo (tentei usar a função Subtotal ao invés da Soma mas não deu certo). Então parti pra VBA e fiz o código abaixo:


Function CONTAR_ÚNICOS()

    Dim lng_linha As Long
    Dim intervalo As Range

    Application.ScreenUpdating = False

    'desproteger planilha
    ActiveSheet.Unprotect ("***")

    Range("Tabela5[[#Headers],[Matrícula]]").Select
    Range("B13:B2000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("G13"), Unique:=True

    ultima_linha = Sheets("Relatorio_Faltas").Cells(Rows.Count, "G").End(xlUp).Row
    
    Set intervalo = Sheets("Relatorio_Faltas").Range("G14" & "G" & ultima_linha)

    Columns("G:G").Select
    Selection.Delete Shift:=xlToLeft

    Range("Tabela5[#Headers]").Select
    Selection.AutoFilter
    ActiveSheet.ListObjects("Tabela5").Range.AutoFilter Field:=1, Criteria1:="<>"

    Range("A6:F6").Select

    ActiveSheet.Protect ("***"), DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True 'proteger planilha

    Application.ScreenUpdating = True

    CONTAR_ÚNICOS = WorksheetFunction.Sum(intervalo)

End Function

Ele copia os valores únicos para uma coluna auxiliar utilizando o filtro avançado e depois retorna o total de registros únicos. Feito isso inseri a função criada numa célula, mas sempre retorna o valor 0. Quando mudo passo o código para um procedimento ao invés de função funciona.

A minha pergunta é: como chamar esse procedimento sempre que o filtro de qualquer coluna da tabela for utilizado?

Grato pela atenção!

 
Postado : 16/04/2014 9:35 am
(@rodolfohms)
Posts: 13
Active Member
Topic starter
 

Corrigindo... eu quero contar os registros uma única vez, sem suas repetições.

 
Postado : 16/04/2014 11:17 am
(@rodolfohms)
Posts: 13
Active Member
Topic starter
 

Olá meus amigos. Consegui resolver sem necessidade do código postado anteriormente com o seguinte looping:

lng_lin_bd = 14
        
matricula = Sheets("Relatorio_Faltas").Cells(lng_lin_bd, 2)
        
        Do Until lng_lin_bd = lng_lin_rel
            
            If matricula = Sheets("Relatorio_Faltas").Cells(lng_lin_bd, 2) And matricula <> matricula_anterior Then
            
                Sheets("Relatorio_Faltas").Cells(lng_lin_bd, 7) = 1
                matricula_anterior = matricula
                
            End If
            
            lng_lin_bd = lng_lin_bd + 1
            matricula = Sheets("Relatorio_Faltas").Cells(lng_lin_bd, 2)
            
        Loop
 
Postado : 16/04/2014 1:04 pm