我在Excel中过滤了一个表,但我只想要出现的第一行。
答案 0 :(得分:2)
在过滤范围内使用Range.SpecialCells method和xlCellTypeVisible参数。 .Rows(1).Cells
应该是你想要的。
Sub first_row()
Dim rFirstFilteredRow As Range
With Worksheets("Sheet1")
With .Cells(1, 1).CurrentRegion
'do all the .autofilter stuff here
With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
If CBool(Application.Subtotal(103, .Cells)) Then
Set rFirstFilteredRow = _
.SpecialCells(xlCellTypeVisible).Rows(1).Cells
'~~> rFirstFilteredRow is not a copy of the first visible row
'do something with rFirstFilteredRow
End If
End With
End With
End With
End Sub
您必须转录此内容以适合您自己AutoFilter Method的实施。
使用了原生工作表SUBTOTAL function,因为它只计算可见单元格。这是一种简单的非破坏性方法,用于确定在应用过滤器后是否有任何要引用的单元格。
答案 1 :(得分:1)
protocol MyClassDelegate: class {
func foo(_ str: String)
}
class MyClass {
weak var delegate: MyClassDelegate?
func foo() {
delegate?.foo("working")
}
let button: UIButton = {
button.addTarget(self, action: #selector(foo), for: .touchUpInside)
return button
}()
}
class MyViewController { ... }
extension MyViewController: MyClassDelegate {
func foo(_ str: String) {
print(str)
}
}
答案 2 :(得分:0)
我尝试了一下,对我来说效果很好。做到的第一段代码。谢谢!
frow_main = Worksheets(main_sheet_name).AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells().Row
我试图在自动过滤器之后找到第一行,但是其他偏移量代码却一直给我第1行。
我需要第27行,但是并不能保证每次都会有27行。
您的灵感起作用了!
'Reset LastRow
LastRow = Range("A" & Rows.Count).End(xlUp).Row
'Remove the "Bear" invoice method
ActiveSheet.Range("$A$1:$E$" & LastRow).AutoFilter Field:=5, Criteria1:="=BEAR", Operator:=xlOr, Criteria2:="=#REF!"
FirstRow = Worksheets("testOriginalData").AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells().Row
Rows(FirstRow).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData
Range("A2").Select