Macro para filtrar una columna de acuerdo a su título

Les pido puedan ayudarme con lo siguiente. En la Hoja "ABM" hay una tabla con rango B2:AE1000. Desde otra hoja activo la siguiente macro con la cual filtro según datos en las columnas 1, 6 y 26. Me sucede que a la hoja "ABM" continuamente hago cambios agregándole o quitándole columnas, y cada vez que hago ésto tengo que tocar la macro cambiándole el número de Field; porque lo que antes era el Field:=6, ahora, al agregarle dos columnas antes, se transforma en el Field:=8.

¿Cómo puedo hacer para dar la instrucción de que filtre por el título de la columna? Dado que, aunque cambie el número de columna por haber agregado o quitado columnas a la tabla, el título de la columna siempre permanecerá igual.

Sub blanco_agendaHoy_ars()
    On Error Resume Next
    Sheets("ABM").Select
    Sheets("ABM").ShowAllData
    Sheets("ABM").Range("$B$2:$AC$2000").AutoFilter Field:=1, Criteria1:="Agenda Hoy"
    Sheets("ABM").Range("$B$2:$AC$2000").AutoFilter Field:=6, Criteria1:="="
    Sheets("ABM").Range("$A$3:$AI$2000").AutoFilter Field:=26, Criteria1:="<>-"
    ActiveWindow.ScrollRow = 1
    On Error GoTo 0
    Sheets("ABM").Range("C2").Select
ActiveSheet.Protect "", _
    DrawingObjects:=False, Contents:=True, _
    Scenarios:=True, AllowFormattingCells:=True, _
    AllowFormattingColumns:=True, AllowFormattingRows:=True, _
    AllowInsertingColumns:=False, AllowInsertingRows:=False, _
    AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, _
    AllowDeletingRows:=False, AllowSorting:=True, _
    AllowFiltering:=True, AllowUsingPivotTables:=False
Application.ScreenUpdating = True
End Sub

1 respuesta

Respuesta
1

Prueba lo siguiente:

Sub blanco_agendaHoy_ars()
  Dim f As Range, col As Long
  Set f = Rows(2).Find("Titulo", , xlValues, xlWhole)
  If Not f Is Nothing Then
    col = f.Column - 1
    Sheets("ABM").Select
    On Error Resume Next
    If Sheets("ABM").AutoFilterMode Then Sheets("ABM").AutoFilterMode = False
    Sheets("ABM").Range("$B$2:$AC$2000").AutoFilter Field:=1, Criteria1:="Agenda Hoy"
    Sheets("ABM").Range("$B$2:$AC$2000").AutoFilter Field:=col, Criteria1:="="
    Sheets("ABM").Range("$A$3:$AI$2000").AutoFilter Field:=26, Criteria1:="<>-"
    On Error GoTo 0
    Sheets("ABM").Range("C2").Select
    ActiveSheet.Protect "", _
        DrawingObjects:=False, Contents:=True, _
        Scenarios:=True, AllowFormattingCells:=True, _
        AllowFormattingColumns:=True, AllowFormattingRows:=True, _
        AllowInsertingColumns:=False, AllowInsertingRows:=False, _
        AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, _
        AllowDeletingRows:=False, AllowSorting:=True, _
        AllowFiltering:=True, AllowUsingPivotTables:=False
    Application.ScreenUpdating = True
  Else
    MsgBox "No existe el título"
  End If
End Sub

Dante,

Lo probé. En la línea 3 de la macro, en donde dice "Título" agregué el título de la columna en cuestión... Pero me dice que no existe el título, como que no lo está leyendo...

Dante,

Encontré la solución. En la fila 3, aparte del título, agregué la referencia a la hoja ABM para la fila 2... Ahora anda bien. Muchas gracias

Set f = Sheets("ABM").Rows(2).Find("Titulo", , xlValues, xlWhole)

Me alegra saber que funciona para ti. R ecuerda valorar la pregunta. Y ¡Gracias! Por comentar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas