Filtrar datos como parte de una macro de VBA

Filtrar datos como parte de una macro de VBA

Estoy intentando crear una macro que automatice un informe. El problema es que los datos de origen aportan datos que no necesitamos y el informe en sí realiza muchos cálculos basados ​​en la tabla en su conjunto. Se están realizando cientos de cálculos basados ​​en la tabla, por lo que agregar un parámetro de inclusión a cada fórmula en el informe llevará una cantidad de tiempo prohibitiva.

Esto se soluciona fácilmente actualizando el informe manualmente, utilizando el filtro, filtrando los datos y eliminando los datos relevantes. Sin embargo, estoy intentando automatizar el archivo para que podamos simplemente hacer clic en un botón y actualizarlo sin tener que dedicar entre 20 y 30 minutos a hacerlo.

Por lo tanto, lo que quiero hacer, pero no he podido resolverlo hasta ahora, es que VBA elimine cada fila donde una columna contiene una determinada cadena.

Esto es parte de una macro más grande, que actualiza los datos, corrige una columna de fechas usando Texto en columnas, elimina una sección de datos, calcula las fórmulas en la hoja del KPI y luego la guarda como la fecha de esta semana.

Puedo automatizar todos los demás pasos, ya que ya he creado varias macros para actualizar otros informes, ¡pero esto me ha dejado perplejo! Mi Google-Fu también me ha fallado.

Respuesta1

Este subelimina las filas completas de una hoja cuando un valor definido por la variablela cuerdaestá en la columna definida por la variablela columna

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

información relacionada