Função FILTRO sem Microsoft 365 – Funções Personalizadas no Excel
Quer saber como criar a função FILTRO sem Microsoft 365? Então vem comigo que eu vou te mostrar o passo a passo!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala, Impressionadores! Na aula de hoje eu quero te mostrar como usar a função FILTRO sem Microsoft 365 (sem o Excel mais atual).
Para isso nós vamos fazer a criação de funções personalizadas utilizando o VBA, então vamos utilizar a função PROCX personalizada (que fizemos em outra aula).
Vamos utilizar matrizes no Excel (array no VBA) e a estrutura de repetição For Each. Com isso nós vamos conseguir criar a função FILTRO.
Essa função FILTRO está disponível na versão mais atual do Excel e te permite filtrar as informações de uma tabela de uma forma mais fácil.
Agora com a ferramenta do VBA você pode criar não só a função FILTRO, como a função PROCX que já criamos aqui no canal, como qualquer outra função que queira!
E aí, quer aprender a criar uma função personalizada no Excel? Então vamos pra aula que o conteúdo está irado!
Inserindo um Módulo no VBA
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.
Como não temos nenhum módulo destinado ao tema da aula de hoje, e por questão de organização, vamos criar um módulo à parte.
Vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Dimensionar a variável “matrizAux” como uma variável do tipo Variant, que pode receber qualquer tipo de dado
Redimensionar a variável “matrizAux” como uma matriz de 1 linha e 1 coluna, que terá um único valor
Armazenar na variável “i”o valor 1. A variável “i” vai representar o contador para guardar em qual elemento da matriz ‘incluir’ estamos
Armazenar na variável “c”o valor 0. A variável “c” vai representar quantos elementos temos na “matrizAux” (matriz resposta)
Utilizar de uma estrutura de repetição do tipo For Each, onde a variável “celula” será a “parte” considerada do conjunto de “partes” dada pela variável “incluir”. A estrutura de repetição vai:
Utilizar de uma estrutura If para verificar o valor do elemento “i” da variável “matriz” (primeiro argumento da Function). Se o elemento “i” da “matriz” for vazio, a estrutura de repetição For Each será abortada pela instrução de saída Exit Sub, e o código seguirá logo abaixo da estrutura For Each em questão
Armazenar na variável “ultItem” o que for resultante da Função UBound, que vai retornar pra gente o enésimo (último) termo da matriz “matrizAux”
Se o valor presenta na variável “c” for maior que do que 0 (a matriz tem elementos, ou seja, é não-nula), vamos redimensionar a “matrizAux” preservando sua forma inicial, mas agora colocando 1 elemento a mais nela (agora ela irá de 1 até 1 + ultElem)
O elemento representado por “c + 1” vai receber o valor que está na matriz, no seu elemento representado por “i”. Ou seja, o último “novo” elemento da “matrizAux” vai receber o elemento da matriz de posição “anterior” a ele
Somar 1 na variável “c”, que vai receber a quantidade anterior + 1
Encerra-se essa condicional
Percorre-se o intervalo de “celulas” do conjunto incluir fazendo as ações acima, e seguimos o código
Se o valor presenta na variável “c” for maior que do que 0 (a matriz tem elementos, ou seja, é não-nula), as seguintes ações vão ocorrer:
A “matrizAux” vai ser transposta completamente pela função Transpose
Se o valor presente de “c” não for maior que 0 (matriz nula), vamos testar o seguinte argumento:
a variável “se_vazia” está vazia? Se sim, a resposta para o 1º elemento da “matrizAux” será “Nenhum valor encontrado”. Essa é de fato a resposta padrão da função para nada ser encontrado no filtro
a variável “se_vazia” NÃO está vazia (ou seja, está preenchida)? Se tem algo preenchido para essa variável, a resposta para o 1º elemento da “matrizAux” será o que estiver na própria variável “se_vazia”. Essa é de fato a resposta programada pelo usuário para nada ser encontrado no filtro
Até aqui, os passos são suficientes para a Function funcionar no Office 365. A partir daqui, se você não tem o Office 365, os passos são fundamentais, criando uma nova matriz para nos ajudar nessa elaboração da Function. Seguiremos:
Vamos armazenar na variável “nLinhas” quantas linhas forem contadas e chamadas pela aplicação para colocar uma fórmula matricial
Se nLinhas for maior do que 1, ou seja, tiver mais do que 1 linha de dados (ou seja, for uma fórmula matricial), vamos:
Redimensionar a variável “novaMatriz” como uma matriz que vai de 1 até “nLinhas”, e 1 coluna apenas.
Armazenar na variável “ultElem” o último termo válido dessa matriz
Se i = 1 (primeiro elemento) e c = 0 (a matriz contém apenas 1 elemento), vamos preencher o único elemento (1ª linha (dada por “i”) e 1ª coluna) da “novaMatriz” como o elemento 1 da “matrizAux”
Se “i” < “ultElem” (ou seja, temos vários elementos e estamos no 1ª em questão pela estrutura de repetição), vamos preencher o elemento “i” (e coluna 1) da “novaMatriz” o correspondente para ela na “matrizAux” (de mesma linha i, e coluna 1). Enquanto essa condição for verdadeira, preencheremos os valores
Caso “i” seja maior do que “ultElem” (ou seja, já preenchemos com sucesso (no tópico acima) todos os elementos da “matrizAux”, e o resto não deveria ter valor), vamos preencher o resto da “novaMatriz” com valor nulo (constante vbNullString)
Encerra-se a estrutura de repetição
Finalmente a “matrizAux” vai receber a “novaMatriz” antes de sairmos dessa condicional onde “nLinhas” seria maior que 1 (fundamental para versões anteriores ao Office 365)
Por fim, a Function “meuFILTRO” vai receber o resultado da “matrizAux”, objeto de toda a estrutura de código explicada acima
Expert em VBA e Power BI da Hashtag Treinamentos. Auxilia no suporte aos alunos da Hashtag Treinamentos e na criação de conteúdos para os que acompanham nossos canais.
Procure o que você quiser sobre Excel, VBA, Power BI ou Python:
Aprenda tudo de Excel para se tornar uma referência no Mercado de Trabalho
Leve os treinamentos da Hashtag para dentro da sua Empresa