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