我的数据表包含过滤器和隐藏列。当过滤器适用时,我需要循环遍历所有过滤的数据。我用: Excel.Range visibleRange = this.UsedRange.SpecialCells(XlCellType.xlCellTypeVisible,missing)as Excel.Range;
现在visibleRange.Rows.Count为0;使用foreach循环“foreach(Excel.Range.Row中的Excel.Range行)”行没有所有列,从第一个隐藏列中切碎。
我们如何循环过滤过的行?
答案 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
包含已包含内容的已过滤行总数。