سلام دوستان
همونطور که میدونین در اکسل قابلیتی داریم به نام فیلتر کردن. گاهی ممکنه پیش بیاد بخواین یک محدوده رو فیلتر کنین. خب حالا فرض کنید بیست تا ستون رو فیلتر کردین و هر ستون رو بر اساس یک آیتم فیلتر کردین. فهمیدن اینکه بر چه اساسی فیلترها اعمال شدن در این حالت کار راحتی نیست. این کد کمک میکنه شما بفهمین هر ستون بر چه اساس فیلتر شده و همچنین بدونین محدوده فیلتر شدتون کجاست.
این ظاهر این فایل هست اما اگر به کدها دقت کنید و یکم خلاق باشید میتونین متوجه بشید که چه کارهایی میشه با محدوده های فیلتر شده انجام داد مثلا اینکه بدونیم در یک ستون چند آیتم فیلتر شده و یا هر چیزی در مورد فیلتر ها
کد:
Sub ShowAutoFilterCriteria() Dim oAF As AutoFilter, oFlt As Filter Dim sField As String Dim sCrit1 As String, sCrit2 As String Dim sMsg As String, i As Integer 'Check if the sheet is filtered at all If ActiveSheet.AutoFilterMode = False Then MsgBox "The sheet does not have an AutoFilter" Exit Sub End If 'Get the sheet's AutoFilter object Set oAF = ActiveSheet.AutoFilter 'Loop through the Filters of the AutoFilter For i = 1 To oAF.Filters.Count 'Get the field name from the first row 'of the AutoFilter range sField = oAF.Range.Cells(1, i).Value 'Get the Filter object Set oFlt = oAF.Filters(i) 'If the filter is on... If oFlt.On Then 'Get the standard filter criteria sMsg = sMsg & vbCrLf & sField & oFlt.Criteria1 'If it's a special filter, show it Select Case oFlt.Operator Case xlAnd sMsg = sMsg & " And " & sField & oFlt.Criteria2 Case xlOr sMsg = sMsg & " Or " & sField & oFlt.Criteria2 Case xlBottom10Items sMsg = sMsg & " (bottom 10 items)" Case xlBottom10Percent sMsg = sMsg & " (bottom 10%)" Case xlTop10Items sMsg = sMsg & " (top 10 items)" Case xlTop10Percent sMsg = sMsg & " (top 10%)" End Select End If Next If sMsg = "" Then 'No filters are applied, so say so sMsg = "The range " & oAF.Range.Address & " is not filtered." Else 'Filters are applied, so show them sMsg = "The range " & oAF.Range.Address & " is filtered by:" & sMsg End If 'Display the message MsgBox sMsg End Sub
کامنت