如何获取excel中的所有过滤数据行(隐藏列)?

时间:2009-08-18 19:39:25

标签: excel vba filter loops

我的数据表包含过滤器和隐藏列。当过滤器适用时,我需要循环遍历所有过滤的数据。我用:   Excel.Range visibleRange = this.UsedRange.SpecialCells(XlCellType.xlCellTypeVisible,missing)as Excel.Range;

现在visibleRange.Rows.Count为0;使用foreach循环“foreach(Excel.Range.Row中的Excel.Range行)”行没有所有列,从第一个隐藏列中切碎。

我们如何循环过滤过的行?

2 个答案:

答案 0 :(得分:4)

我根本不会使用SpecialCells属性。只需遍历UsedRange中的每一行,然后检查Hidden属性。

不确定您使用的是哪种语言,但这是VBA中的一个示例:

Dim rowIndex As Range

With Worksheets("Sheet1")
    For Each rowIndex In .UsedRange.Rows
        If (rowIndex.Hidden) Then
            ' do nothing - row is filtered out
        Else
            ' do something
        End If
    Next rowIndex
End With

每一行(或更确切地说,Range引用的每个rowIndex对象)将包含所有列,包括隐藏的列。如果您需要确定列是否被隐藏,那么只需检查Hidden属性,但请记住这仅适用于整个列或行:

Dim rowIndex As Range
Dim colNumber As Integer

With Worksheets("Sheet1")
    For Each rowIndex In .UsedRange.Rows
        If (rowIndex.Hidden) Then
            ' do nothing - row is filtered out
        Else
            For colNumber = 1 To .UsedRange.Columns.Count
                ' Need to check the Columns property of the Worksheet
                ' to ensure we get the entire column
                If (.Columns(colNumber).Hidden) Then
                    ' do something with rowIndex.Cells(1, colNumber)
                Else
                    ' do something else with rowIndex.Cells(1, colNumber)
                End If
            Next colNumber
        End If
    Next rowIndex
End With

答案 1 :(得分:0)

线程死灵时间。这就是我的工作。

'Count the total number of used rows in the worksheet (Using Column A to count on)

numFilteredCells = Application.WorksheetFunction.Subtotal(3, Range("A1:A" & Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row))

'Find Last filtered row with content

j = Range("A1").Cells(Rows.Count, 1).End(xlUp).Offset(0, 0).Row

'Subtract the total number of filtered rows with content, + 1

jTargetDataRow = j - numFilteredCells + 1

jTargetDataRow现在包含第一个带内容的已过滤行,j包含最后一行,numFilteredCells包含已包含内容的已过滤行总数。