Filtrando dados como parte de uma macro VBA

Filtrando dados como parte de uma macro VBA

Estou tentando criar uma macro que automatize um relatório. O problema é que os dados de origem trazem dados que não precisamos, e o próprio relatório faz muitos cálculos com base na tabela como um todo. Há centenas de cálculos sendo feitos com base na tabela, portanto, adicionar um parâmetro de inclusão a cada fórmula do relatório levará um tempo proibitivo.

Isso é facilmente contornado ao atualizar o relatório manualmente, usando o filtro, filtrando os dados e excluindo os dados relevantes. No entanto, estou tentando automatizar o arquivo, para que possamos apenas clicar em um botão e atualizá-lo sem precisar gastar 20 a 30 minutos fazendo isso.

O que eu quero fazer, mas não consegui resolver até agora, é fazer com que o VBA exclua todas as linhas onde uma coluna contém uma determinada string.

Isso faz parte de uma macro maior, que atualiza dados, corrige uma coluna de datas usando Texto para Colunas, exclui uma seção de dados, calcula as fórmulas na planilha de KPI e salva-a como a data desta semana.

Posso automatizar todas as outras etapas ok, pois já criei várias macros para atualizar outros relatórios, mas isso me deixou perplexo! Meu Google-Fu também falhou comigo.

Responder1

Este sub exclui a(s) linha(s) inteira(s) de uma planilha quando um valor definido pela variávela cordaestá na coluna definida pela variávela coluna

Sub deleterows()
    Dim a As Application
    Dim wkb As Workbook
    Dim wks As Worksheet
    Dim DataRange As Range
    Set a = Application
    Set wkb = ThisWorkbook
    Set wks = wkb.ActiveSheet
    wks.Application.ScreenUpdating = False
    thecolumn = 2 'this have to be changed to the desired column
    thestring = "some text" ' this have to be changed too
    reviewing = True
    visitrow = 1
    While reviewing = True
        visitrow = visitrow + 1
        If wks.Cells(visitrow, 1) = "" Then
            reviewing = False
        End If
        celldata = wks.Cells(visitrow, thecolumn)
        If IsNumeric(celldata) = True Then
            celldata = Trim(Str(celldata))
        End If
        If celldata = thestring Then
            wks.Rows(visitrow).Delete
            visitrow = visitrow - 1
        End If
    Wend
   wks.Application.ScreenUpdating = True
   Message = MsgBox("Finished!", vbOKOnly)
End Sub

informação relacionada