আমি জানি যে আমি সুপার ইউজারে আছি এবং স্ট্যাকওভারফ্লোতে নেই, তবে এক্সেল 2016-এ ভিবিএ কোড ব্যবহার করে এই সমস্যার সমাধান খুঁজে পাওয়া যাবে।
আমার একই রকম (আরও জটিল) সমস্যা আছে।
আমি স্পষ্ট কলামগুলিতে কিছু ফিল্টার যুক্ত করতে চাই তবে কেবল সারি 2 এ সারি 1 এ নয় কারণ আপনি নিম্নলিখিত স্ক্রিনের ক্যাপচারটিতে দেখতে পাচ্ছেন।
আমি এক্সেল জিইউআই ব্যবহার করার চেষ্টা করেছি তবে এটি অসম্ভব বলে মনে হচ্ছে, তাই আমি নিম্নলিখিত কোডটি লিখেছি:
'********************************************************
'* 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
এই কোডের যুক্তিটি হ'ল
উ: সারি 2-তে ফিল্টার যুক্ত করার জন্য উল্লম্বভাবে মার্জড শিরোনাম ঘরগুলি মার্জন করুন
Range("A1:A2").MergeCells = False
কক্ষগুলি এ 1 এবং এ 2 নিমজ্জিত।
বি। সারি 2 এর সমস্ত কক্ষে অটোফিল্টার যুক্ত করুন
Range("A2:Z" & nLast).AutoFilter
সারি 1 বাদে সমস্ত সারিতে থাকা সেলগুলির জন্য অটোফিল্টার তৈরি করা হয়।
গ। কিছু কলামের জন্য ফিল্টার কম্বোবক্স সরান বা লুকান
Selection.AutoFilter Field:=GetColumnIndex("C"), VisibleDropDown:=False
"সি" কলামের ড্রপবক্স লুকানো আছে।
D. আসল অবস্থা পুনরুদ্ধার করতে নিমজ্জিত কক্ষগুলি মার্জ করুন
Range("A1:A2").MergeCells = True
কক্ষগুলি এ 1 এবং এ 2 আবার একত্রিত করা হয়েছে।