Arquivo da tag: Filtro

Excel – Extendendo o Filtro Avançado (usando curingas)

Algo comum para quem trabalha com desenvolvimento de sistemas (que dirá os programadores SQL), os caracteres curingas são utilizados para ampliar nosso escopo de pesquisas. São atalhos para facilitar essencialmente a busca de texto que siga um determinado padrão, por exemplo, um texto que não seja exatamente, mas que apenas contenha determinada informação.

A boa notícia é que este recurso também está disponível no Excel através do filtro avançado.

Em detalhes

As situações são diversas. A que mais encontro são as que colocarei abaixo. Quem já conhece um pouco de consultas em SQL vai se sentir bastante a vontade, principalmente se utiliza o operador LIKE, mais ainda no caso do egine Jet, utilizada no Access.

O curinga ? assume o lugar de qualquer caractere em uma string Localizar. Por exemplo, a string 100? em Localizar encontra os valores 1001, 100A e assim por diante.

O curinga * ocupa o lugar de um ou mais caracteres em uma string Localizar. Por exemplo, a string 1* localiza as entradas 10, 123A, 1-800 etc.

Nota: Para quando quisermos pesquisar uma string que contenha ? ou *, devemos inserir um til (~) antes do caractere. Por exemplo, para encontrar a string Que? – mas não Quem – insira Que~? na caixa de texto Localizar.

Outra dica importante é que se digitarmos um ou mais caracteres sem um sinal de igual (=) para localizar linhas com valor de texto em uma coluna que inicie com tais caracteres. Por exemplo, vamos digitar o texto Min como critério, o Excel irá localizar “Mineiro”, “Minas” etc. Express Training

A boa notícia é que é possível utilizar quase todos os curingas no Localizar do Excel, bastando seguir os padrões acima.

Um exemplo

Considere a planilha abaixo.

Lista de Exemplo para o Filtro com Curingas
Lista de Exemplo para o Filtro com Curingas

Primeiramente, ativamos o auto filtro. Em seguida, vamos a alguns testes. Supondo que queira todas as cidades que comecem com o nome “São”, vá em personalizar filtro e coloque o seguinte:

Personalizando o Filtro
Personalizando o Filtro

Veja que na própria tela de personalização de filtro já são dados alguns exemplos de uso dos curingas. Clique em OK e veja o resultado:

Filtro "São*" aplicado
Filtro "São*" aplicado

Exatamente o que queríamos. Note que a cidade São Bernardo do Campo não apareceu no resultado do nosso filtro. Claro, já que o “São” está digitado como “Sáo”. Muitas vezes temos uma situação parecida, comum em casos de importação de arquivos externos de texto, HTML e outros que acabam por perder  a formatação ou codificação, trazendo caracteres diferentes daqueles que esperamos ser. Nesse momento é que curingas são importantes. Para ignorar o erro no caso citado, bastaria alterar o filtro de “São*” como foi definido inicialmente para “S?o*”. Aplicando o filtro, temos o resultado:

Filtro corrigido
Filtro corrigido

Aqui vale um recado. Utilizar a sequência “S*o*” funcionaria? Neste caso, a cidade de Santo André também seria incluída na lista. Porque? Simples. Como explicado acima, o curinga ? quer dizer qualquer caractere, enquanto o * quer dizer um ou muitos, portanto, “São” e “Santo” são válidos para este último.

Bom proveito!

VBA – Somando apenas as células visíveis no AutoFiltro

Dois dos recursos mais poderosos do Excel infelizmente não conseguem trabalhar bem juntos.

O problema reside no fato de que a função SOMA compreende um range de células e inclui em sua soma todo o intervalo. Por exemplo, você possui uma planilha que abrange da linha 2 a linha 50. Aplica uma fórmula SOMA, por exemplo, na coluna C, o que geraria o seguinte:

=SOMA(C2:C50)

Se aplicar um AutoFiltro nesta planilha, perceberá que sua fórmula continua considerando todas as linhas, mesmo as que não estão visíveis. Dependendo da situação, isso pode ser um problema. Não há funções tradicionais para resolvê-lo, porém, uma macro pode ajudar.

Copie e cole esta função personalizada em um módulo VBA.

Function Soma_Celulas_Visiveis(Cells_To_Sum As Object)
    Application.Volatile
    For Each cell In Cells_To_Sum
        If cell.Rows.Hidden = False Then
            If cell.Columns.Hidden = False Then
                Total = Total + cell.Value
            End If
        End If
    Next
    Soma_Celulas_Visiveis = Total
End Function

Agora, substitua a função citada acima pela seguinte:

=Soma_Celulas_Visiveis(C2:C50)

Ou adapte ao range da sua planilha. Agora, aplique o autofiltro de forma que algumas linhas fiquem escondidas. Note que a função considera apenas as células que estão visíveis agora.

Explicando

O segredo da função acima está na seguinte linha:

If cell.Rows.Hidden = False Then

Essa linha verifica se a linha da célula corrente está oculta ou não (propriedade Hidden). Quando o filtro é aplicado, as linhas que não obedecem aos critérios do filtro ficam no estado de Hidden = True.

Espero que a dica seja de grande ajuda.

Bom proveito!

Download da Planilha de exemplo

http://www.tomasvasquez.com.br/downloads/Soma_Celulas_Visiveis.zip

Referências

http://support.microsoft.com/?scid=kb%3Ben-us%3B150363&x=10&y=14

VBA – Filtrar dados no ListBox (Tela de Pesquisa) – Parte 2

Há algum tempo, publiquei um exemplo de código VBA que permitia efetuar um filtro em uma lista de itens em um ListBox (UserForm), mas especificamente neste link:

https://www.tomasvasquez.com.br/blog/microsoft-office/vba-como-filtrar-dados-no-listbox

Bom, nas discussões no nosso fórum, acabamos por aperfeiçoar o código para algo mais abrangente. A boa notícia é que o código continua bem genérico, pode ser facilmente acoplado em qualquer planilha. A notícia ótima é que os critérios de filtro ficaram bem mais completos.

O código agora permite selecionar o campo no qual será aplicado o filtro, o valor do filtro e mostra todos as colunas da tabela. Abaixo segue como ficou a aparência do formulário:

O código VBA

Entrando um pouco em detalhes a respeito do funcionamento do código e como adaptá-lo a sua planilha, seguem algumas considerações.

Variáveis

Private Const NomePlanilha As String = "Fornecedores"
Private Const LinhaCabecalho As Integer = 1

NomePlanilha contempla o nome da planilha ao qual será aplicado o filtro. Altere para o nome da sua planilha.

LinhaCabecalho representa qual a linha da sua planilha contém o cabeçalho da tabela. É nele que se baseiam todos as outras funções.

Funções

PreencheCampos – Preenche o ComboBox com o nome dos cabeçalhos

PreencheCabecalho – Função auxiliar para colocar no ListBox de resultado o cabeçalho dos valores

PreencheLista – Preenche o ListBox de resultado considerando os valores de filtro

Download da planilha

Filtra_ListBox_VBA_Custom.zip

Bom proveito!