Yo sé que estoy en superusuario y no en StackOverflow, pero la solución a este problema puede ser encontrado en el uso de código VBA en Excel 2016.
Tengo un problema similar (más complejo).
Quiero añadir algunos filtros en columnas explícitas, pero no en la fila 1 sólo en la fila 2 como se puede ver en la siguiente captura de pantalla.
Intenté usar Excel GUI pero parece imposible, así que escribí el siguiente código:
'********************************************************
'* SetFilter()
'********************************************************
'* PUBLIC method to call to define CUSTOM AutoFilter
'* on complex header.
'********************************************************
Sub SetFilter()
'Compute last row number
Dim nLast As Long
nLast = Range("A" & Rows.Count).End(xlUp).Row
'Lock screen update
Application.ScreenUpdating = False
'Unmerge merged cells to allow adding filter
Range("A1:A2").MergeCells = False
Range("B1:B2").MergeCells = False
Range("C1:C2").MergeCells = False
Range("D1:D2").MergeCells = False
Range("E1:E2").MergeCells = False
Range("F1:F2").MergeCells = False
'Add filter on row 2 and not 1
Range("A2:Z" & nLast).Select
Selection.AutoFilter
'Remove (or Hide) filter combobox for some columns
Selection.AutoFilter Field:=GetColumnIndex("C"), VisibleDropDown:=False
Selection.AutoFilter Field:=GetColumnIndex("G"), VisibleDropDown:=False
Selection.AutoFilter Field:=GetColumnIndex("H"), VisibleDropDown:=False
'Merge unmerged cells to restore previous state
Range("A1:A2").MergeCells = True
Range("B1:B2").MergeCells = True
Range("C1:C2").MergeCells = True
Range("D1:D2").MergeCells = True
Range("E1:E2").MergeCells = True
Range("F1:F2").MergeCells = True
'Unlock screen update
Application.ScreenUpdating = True
End Sub
'********************************************************
'* GetColumnIndex()
'********************************************************
'* return column's index from column letters
'********************************************************
Function GetColumnIndex(sColLetter As String) As Integer
Dim n As Integer: n = 0
Dim iMax As Integer: iMax = Len(sColLetter)
Dim i As Integer
Dim sChar As String
Dim c As Integer
For i = 1 To iMax
sChar = Mid(sColLetter, i, 1)
c = 1 + Asc(sChar) - Asc("A")
n = n * 26 + c
Next
If n = 1 Then
n = 1
End If
GetColumnIndex = n
End Function
La lógica de este código es
A. Desunir celdas de encabezado fusionadas verticalmente para permitir agregar filtro en la fila 2
Range("A1:A2").MergeCells = False
Las células A1 y A2 son sin combinar.
B. Añadir Autofiltro en todas las células de la fila 2
Range("A2:Z" & nLast).AutoFilter
El Autofiltro se genera para las celdas en todas las filas excepto la fila 1.
C. Quitar o Combobox FILTROS para ocultar algunas columnas
Selection.AutoFilter Field:=GetColumnIndex("C"), VisibleDropDown:=False
DropBox de la columna "C" está oculta.
D. Combinar celdas sin combinar para restaurar el estado original
Range("A1:A2").MergeCells = True
Las células A1 y A2 se fusionan de nuevo.