App*_*Pie 3 excel vba excel-2007 excel-vba
这是另一个奇怪的.
我有这个代码,它使用过滤器从一张纸上获取数据,并使用该Range.SpecialCells()方法查找要复制和粘贴的相应行.但是,如果我使用Rows().SpecialCells()或者如果我使用行SpecialCells数返回的行属性是错误的.这就是我的意思:
With Worksheets("ret-" & sNumRet)
.EnableAutoFilter = True
.AutoFilter.Range.AutoFilter Field:=3, Criteria1:=sSection
iLast = Range("C1").End(xlDown).Row
numRows = .Range("B2:B" & iLast).SpecialCells(xlCellTypeVisible).Cells.Count
End With
Run Code Online (Sandbox Code Playgroud)
这段代码产生大约8k行,这是一个有意义的数字.
With Worksheets("ret-" & sNumRet)
.EnableAutoFilter = True
.AutoFilter.Range.AutoFilter Field:=3, Criteria1:=sSection
iLast = Range("C1").End(xlDown).Row
numRows = .Rows("2:" & iLast).SpecialCells(xlCellTypeVisible).Rows.Count
End With
Run Code Online (Sandbox Code Playgroud)
结果产量为4.
With Worksheets("ret-" & sNumRet)
.EnableAutoFilter = True
.AutoFilter.Range.AutoFilter Field:=3, Criteria1:=sSection
iLast = Range("C1").End(xlDown).Row
numRows = .Range("B2:B" & iLast).SpecialCells(xlCellTypeVisible).Rows.Count
End With
Run Code Online (Sandbox Code Playgroud)
结果也产生4.这两者当然都是错的.我有45k行数据,我可以看到使用过滤器显示至少几千个.这些陈述之间是否存在某些意义上的差异?我希望它们在这里的上下文中几乎相同.
谢谢 !
这与SpecialCellsExcel 没有关系,而是Excel如何计算行数. Rows.Count返回计算Area范围内每个连续的计数.例如,在立即窗口中:
? range("a2:a3,a5:a7").cells.Count
Run Code Online (Sandbox Code Playgroud)
返回5
? range("2:3,5:7").rows.Count
Run Code Online (Sandbox Code Playgroud)
返回2
? range("2:3,5:7").areas(1).rows.Count
Run Code Online (Sandbox Code Playgroud)
返回2
? range("2:3,5:7").areas(2).rows.Count
Run Code Online (Sandbox Code Playgroud)
返回3
如您所见,如果您未指定区域,则返回第一个区域.
要获得所有区域的答案循环:
Sub CountRows()
Dim i As Long
Dim RowTotal As Long
With ActiveSheet.Range("2:3,5:7")
For i = 1 To .Areas.Count
RowTotal = RowTotal + .Areas(i).Rows.Count
Next i
End With
Debug.Print RowTotal
End Sub
Run Code Online (Sandbox Code Playgroud)