Sei que estou no SuperUser e não no StackOverflow, mas a solução para esse problema pode ser encontrada usando o código VBA no Excel 2016.
Eu tenho um problema semelhante (mais complexo).
Quero adicionar alguns filtros em colunas explícitas, mas não na linha 1, apenas na linha 2, como você pode ver na captura da tela a seguir.
Eu tentei usar a GUI do Excel, mas isso parece impossível, então escrevi o seguinte 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
A lógica deste código é
A. Unmerge as células de cabeçalho mescladas verticalmente para permitir adicionar filtro na linha 2
Range("A1:A2").MergeCells = False
As células A1 e A2 estão inalteradas.
B. Adicione o AutoFiltro em todas as células da linha 2
Range("A2:Z" & nLast).AutoFilter
O AutoFiltro é gerado para células em todas as linhas, exceto a linha 1.
C. Remova ou oculte a caixa de combinação FILTER para algumas colunas
Selection.AutoFilter Field:=GetColumnIndex("C"), VisibleDropDown:=False
DropBox da coluna "C" está oculto.
D. Mesclar células não imersas para restaurar o estado original
Range("A1:A2").MergeCells = True
As células A1 e A2 são mescladas novamente.