Saya tahu bahwa saya menggunakan SuperUser dan bukan di StackOverflow, tetapi solusi untuk masalah ini dapat ditemukan dalam menggunakan kode VBA di Excel 2016.
Saya memiliki masalah yang serupa (lebih kompleks).
Saya ingin menambahkan beberapa filter pada kolom eksplisit tetapi tidak pada baris 1 hanya pada baris 2 seperti yang Anda lihat pada tangkapan layar berikut ini.
Saya telah mencoba menggunakan Excel GUI tetapi ini sepertinya tidak mungkin, jadi saya telah menulis kode berikut:
'********************************************************
'* 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
Logika dari kode ini adalah
A. Unmerge sel header yang digabung secara vertikal untuk memungkinkan penambahan filter pada baris 2
Range("A1:A2").MergeCells = False
Sel A1 dan A2 tidak dipisahkan.
B. Tambahkan Filter Otomatis pada semua sel baris 2
Range("A2:Z" & nLast).AutoFilter
Filter Otomatis dihasilkan untuk sel di semua baris kecuali baris 1.
C. Hapus atau sembunyikan Combobox FILTER untuk beberapa kolom
Selection.AutoFilter Field:=GetColumnIndex("C"), VisibleDropDown:=False
DropBox Kolom "C" disembunyikan.
D. Gabungkan sel-sel yang tidak dimerger untuk mengembalikan keadaan semula
Range("A1:A2").MergeCells = True
Sel A1 dan A2 digabungkan lagi.