2009-08-18 7 views
1

Mein Datenblatt enthält Filter und ausgeblendete Spalten. Wenn Filter angewendet werden, muss ich alle gefilterten Daten durchlaufen. Ich benutze: Excel.Range visibleRange = this.UsedRange.SpecialCells (XlCellType.xlCellTypeVisible, fehlende) als Excel.Range;Wie erhalten Sie alle gefilterten Datenzeilen in Excel (mit ausgeblendeten Spalten)?

Jetzt visibleRange.Rows.Count ist 0; foreach-Schleife verwenden "foreach (Excel.Range-Zeile in visibleRange.Row)" -Zeile hat nicht alle Spalten, die von der ersten versteckten Spalte abgeschnitten sind.

Wie können wir die gefilterten Zeilen durchlaufen?

Antwort

4

Ich würde die SpecialCells Eigenschaft überhaupt nicht verwenden. Durchlaufen Sie einfach jede Zeile in der UsedRange und überprüfen Sie die Hidden Eigenschaft, wie Sie gehen.

nicht sicher, welche Sprache Sie verwenden, aber hier ist ein Beispiel in 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 

Jede Zeile (oder vielmehr jeden Range Objekt durch rowIndex verwiesen) alle Spalten einschließlich der versteckten enthalten. Wenn Sie ermitteln müssen, ob eine Spalte ausgeblendet ist, dann überprüfen Sie die Hidden Eigenschaft aber nicht vergessen, dass dies nur für ganze Spalten oder Zeilen gilt:

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 
+0

Vielen Dank. – PerlDev

0

Thema Necro Zeit. Hier ist was ich mache.

'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 enthält nun die erste gefilterte Zeile mit Inhalt, j die letzte enthält und numFilteredCells enthält die Gesamtanzahl von Zeilen, die gefilterten Inhalt haben.