简体   繁体   English

如何在过滤器上应用动态范围

[英]How to apply dynamic range on a filter

I'm trying to encode the dynamic range into the filter.我正在尝试将动态范围编码到过滤器中。 However, I'm unsure of how.但是,我不确定如何。 I want the filter to check if there are any NA's, if there this, then I want to display them.我希望过滤器检查是否有任何 NA,如果有,那么我想显示它们。 If there are no NA's, then I want the "Select All" filter.如果没有 NA,那么我想要“全选”过滤器。

Sub SDOIP5()

' SDOIP5 Macro
' It filters the NA in Subcluster
'

Dim LastRow2 As Long
LastRow2 = Range("A" & Rows.Count).End(xlUp).Row

ActiveSheet.Range("$A$2:$BI$196").AutoFilter Field:=1, Criteria1:="#N/A"

End Sub

Filter Dynamic Range滤波器动态范围

Option Explicit

Sub SDOIP5()
' SDOIP5 Macro
' It filters the NA in Subcluster '
'
    Const CriteriaValue As String = "#N/A"
    
    With ActiveSheet
        Dim rng As Range
        ' If for any reason 'CurrentRegion' doesn't work for you,
        ' then just define the complete range including the headers.
        Set rng = .Range("A1").CurrentRegion
        ' To test that you have the right range, uncomment the following line
        ' to write the defined range address to the Immediate window (CTRL+G).
        'Debug.Print rng.Address(0, 0)
        Application.ScreenUpdating = False
        rng.AutoFilter Field:=1, _
                       Criteria1:=CriteriaValue
        With rng.SpecialCells(xlCellTypeVisible)
            If .Rows.Count = 1 And .Areas.Count = 1 Then
                .Parent.ShowAllData
            End If
        End With
    End With

End Sub

EDIT:编辑:

  • This will use the defineEndRange function to define your range.这将使用defineEndRange函数来定义您的范围。

  • The solution is setup with the first cell A2 .解决方案是设置第一个单元格A2

  • Again, if this doesn't work, you will have to supply the range manually eg同样,如果这不起作用,您将不得不手动提供范围,例如

    Set rng = .Range("A2:BI196")

The Code编码

Option Explicit

Sub SDOIP5()
' SDOIP5 Macro
' It filters the NA in Subcluster '
'
    Const CriteriaValue As String = "#N/A"
    
    With ActiveSheet
        Dim rng As Range
        Set rng = defineEndRange(.Range("A2"))
        ' To test that you have the right range, uncomment the following line,
        ' to write the defined range address to the Immediate window (CTRL+G).
        Debug.Print rng.Address(0, 0)
        Application.ScreenUpdating = False
        rng.AutoFilter Field:=1, _
                       Criteria1:=CriteriaValue
        With rng.SpecialCells(xlCellTypeVisible)
            If .Rows.Count = 1 And .Areas.Count = 1 Then
                .Parent.ShowAllData
            End If
        End With
    End With

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose:      Defines the range from a specified first cell to the last cell
'               of its Current Region. It is the Current Region minus the cells
'               to the left and above of the specified first cell.
' Remarks:      If the specified first cell is "A1", then its Current Region
'               and its End Range are the same.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function defineEndRange(FirstCellRange As Range) _
         As Range
    ' Initialize error handling.
    Const ProcName As String = "defineEndRange"
    On Error GoTo clearError
    ' Validate First Cell Range.
    If FirstCellRange Is Nothing Then
        GoTo NoFirstCellRange
    End If
    ' Define Current Region ('rng').
    Dim rng As Range
    Set rng = FirstCellRange.CurrentRegion
    ' Define End Range.
    Set defineEndRange = FirstCellRange _
      .Resize(rng.Rows.Count + rng.Row - FirstCellRange.Row, _
              rng.Columns.Count + rng.Column - FirstCellRange.Column)
    ' Exit.
    GoTo ProcExit
' Labels
NoFirstCellRange:
    Debug.Print "'" & ProcName & "': No First Cell Range."
    GoTo ProcExit
clearError:
    Debug.Print "'" & ProcName & "': " & vbLf _
              & "    " & "Run-time error '" & Err.Number & "':" & vbLf _
              & "        " & Err.Description
    On Error GoTo 0
    GoTo ProcExit
ProcExit:
End Function

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 VBA 中为动态范围应用自动填充功能? - How to apply Autofill function for a dynamic range in VBA? 如何根据多个动态过滤条件过滤 excel 范围 - How to filter an excel range based on multiple dynamic filter conditions Excel VBA-如何创建(不应用)范围内的过滤器? - Excel VBA - How can I create (not apply) a filter in a range? 在ActiveSheet.Range中应用动态范围 - Apply Dynamic Range in ActiveSheet.Range VBA - 如何使用动态日期范围过滤表? - VBA - how to filter a table using a dynamic date range? 如何将数据过滤器仅应用于表范围而不应用于整个行? - How do I apply data filter to only the table range and not the whole row? 如何创建可以将公式应用于单元格动态范围的宏(最好使用数组)? - How to create a macro that can apply a formula to a dynamic range of cells, preferably using array? PHPExcel-如何将边界应用于从mysql数据加载的单元格的动态范围 - PHPExcel - How to apply borders to dynamic range of cells loaded from mysql data 如何使用 VBA 每月/每年应用自动过滤器并根据月/年过滤器添加另一个范围内的值 - How to use VBA to apply Auto Filter per month/year and add a value in another range based on the month/ Year filter 是否可以在自动过滤器语法中指定动态范围? - Is it possible to specify dynamic range in auto filter syntax?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM