मुझे पता है कि मैं SuperUser पर हूं और StackOverflow पर नहीं, लेकिन इस समस्या का समाधान Excel 2016 में VBA कोड का उपयोग करके पाया जा सकता है।
मुझे ऐसी ही (अधिक जटिल) समस्या है।
मैं स्पष्ट कॉलम पर कुछ फिल्टर जोड़ना चाहता हूं, लेकिन पंक्ति 1 पर केवल पंक्ति 2 पर नहीं जैसा कि आप निम्नलिखित स्क्रीन कैप्चर में देख सकते हैं।
मैंने एक्सेल जीयूआई का उपयोग करने की कोशिश की है लेकिन यह असंभव लगता है, इसलिए मैंने निम्नलिखित कोड लिखा है:
'********************************************************
'* 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. पंक्ति 2 पर फ़िल्टर जोड़ने की अनुमति देने के लिए लंबवत रूप से मर्ज किए गए शीर्षलेख कक्षों को अनमर्ज करें
Range("A1:A2").MergeCells = False
सेल A1 और A2 अनमैरिड हैं।
B. पंक्ति 2 की सभी कोशिकाओं पर AutoFilter जोड़ें
Range("A2:Z" & nLast).AutoFilter
AutoFilter पंक्ति 1 को छोड़कर सभी पंक्तियों में कोशिकाओं के लिए उत्पन्न होता है।
C. कुछ स्तंभों के लिए फिल्टर कंबोडॉक्स को निकालें या छिपाएं
Selection.AutoFilter Field:=GetColumnIndex("C"), VisibleDropDown:=False
कॉलम "C" का ड्रॉपबॉक्स छिपा हुआ है।
डी। मूल स्थिति को बहाल करने के लिए अनमेर्जेड कोशिकाओं को मिलाएं
Range("A1:A2").MergeCells = True
सेल A1 और A2 को फिर से मिला दिया जाता है।