Filtro VBA avançado

Este tutorial explicará como usar o método de filtro avançado no VBA

A Filtragem Avançada no Excel é muito útil ao lidar com grandes quantidades de dados onde você deseja aplicar uma variedade de filtros ao mesmo tempo. Ele também pode ser usado para remover duplicatas de seus dados. Você precisa estar familiarizado com a criação de um Filtro avançado no Excel antes de tentar criar um Filtro avançado a partir do VBA.

Considere a seguinte planilha.

Você pode ver rapidamente que há duplicatas que você pode querer remover. O tipo de conta é uma mistura de poupança, empréstimo a prazo e cheque.

Primeiro você precisa configurar uma seção de critérios para o filtro avançado. Você pode fazer isso em uma folha separada.

Para facilidade de referência, chamei minha planilha de dados de ‘Banco de dados’ e minha planilha de critérios de ‘Critérios’.

Sintaxe de filtro avançado

Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique

  • o Expressão representa o objeto de intervalo - e pode ser definido como um intervalo (por exemplo, intervalo (“A1: A50”) - ou o intervalo pode ser atribuído a uma variável e essa variável pode ser usada.
  • o Açao argumento é obrigatório e será xlFilterInPlace ou xlFilterCopy
  • o Faixa de Critérios O argumento é de onde você está obtendo os Critérios para filtrar (nossa planilha de Critérios acima). Isso é opcional, pois você não precisaria de um critério se estivesse filtrando por valores exclusivos, por exemplo.
  • o CopyToRange argumento é onde você colocará os resultados do filtro - você pode filtrar no local ou pode ter o resultado do filtro copiado para um local alternativo. Este também é um argumento opcional.
  • o Exclusivo argumento também é opcional - Verdade é filtrar apenas em registros únicos, Falso é filtrar todos os registros que atendem aos critérios - se você omitir isso, o padrão será Falso.

Filtrando dados no local

Usando os critérios mostrados acima na folha de critérios - queremos encontrar todas as contas com um tipo de 'Poupança' e 'Corrente'. Estamos filtrando no local.

123456789 Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'define o banco de dados e intervalos de critériosDefina rngDatabase = Sheets ("Database"). Range ("A1: H50")Defina rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'filtrar o banco de dados usando os critériosrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaEnd Sub

O código ocultará as linhas que não atendem aos critérios.

No procedimento VBA acima, não incluímos os argumentos CopyToRange ou Unique.

Redefinindo os dados

Antes de executarmos outro filtro, temos que limpar o atual. Isso só funcionará se você filtrar seus dados no local.

12345 Sub ClearFilter ()On Error Resume Next'redefina o filtro para mostrar todos os dadosActiveSheet.ShowAllDataEnd Sub

Filtrando Valores Únicos

No procedimento a seguir, incluí o argumento Unique, mas omiti o argumento CopyToRange. Se você deixar este argumento de fora, você QUALQUER tem que colocar uma vírgula como espaço reservado para o argumento

123456789 Sub UniqueValuesFilter1 ()Dim rngDatabase As RangeDim rngCriteria As Range'define o banco de dados e intervalos de critériosDefina rngDatabase = Sheets ("Database"). Range ("A1: H50")Defina rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'filtrar o banco de dados usando os critériosrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueEnd Sub

OU você precisa usar argumentos nomeados conforme mostrado abaixo.

123456789 Sub UniqueValuesFilter2 ()Dim rngDatabase As RangeDim rngCriteria As Range'define o banco de dados e os intervalos de critériosDefina rngDatabase = Sheets ("Database"). Range ("A1: H50")Defina rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'filtrar o banco de dados usando os critériosrngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueEnd Sub

Ambos os exemplos de código acima irão executar o mesmo filtro, conforme mostrado abaixo - os dados com apenas valores exclusivos.

Usando o argumento CopyTo

123456789 Sub CopyToFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'define o banco de dados e os intervalos de critériosDefina rngDatabase = Sheets ("Database"). Range ("A1: H50")Defina rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'copie os dados filtrados para um local alternativorngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range ("N1: U1"), Unique: = TrueEnd Sub

Observe que poderíamos ter omitido os nomes dos argumentos na linha de código do Filtro avançado, mas usar argumentos nomeados torna o código mais fácil de ler e entender.

Esta linha abaixo é idêntica à linha do procedimento mostrado acima.

1 rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True

Depois que o código é executado, os dados originais ainda são mostrados com os dados filtrados mostrados no local de destino especificado no procedimento.

Removendo duplicatas dos dados

Podemos remover duplicatas dos dados omitindo o argumento Criteria e copiando os dados para um novo local.

1234567 Sub RemoveDuplicates ()Dim rngDatabase As Range'define o banco de dadosDefina rngDatabase = Sheets ("Database"). Range ("A1: H50")'filtra o banco de dados para um novo intervalo com conjunto exclusivo para verdadeirorngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Range ("N1: U1"), Unique: = TrueEnd Sub

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave