Filtrando dados como parte de uma macro VBA

0

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 baseados 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 no relatório demandará um tempo proibitivo.

Isso é facilmente contornado ao atualizar o relatório manualmente, usando o filtro, filtrando 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 de 20 a 30 minutos.

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

Isso é como parte de uma macro maior, que atualiza dados, corrige uma coluna de datas usando Text to Columns, exclui uma seção de dados, calcula as fórmulas na planilha do KPI e a salva como essa data da semana.

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

    
por Miller86 29.09.2015 / 10:44

1 resposta

1

Este sub-item exclui a (s) linha (s) inteira (s) de uma planilha quando um valor definido pela variável thestring está na coluna definida pela variável thecolumn

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
    
por 29.09.2015 / 11:51