繁体   English   中英

Range.SpecialCells具有不同的结果

[英]Range.SpecialCells with varying results

这是另一个奇怪的。

我有这个代码,它使用过滤器从一张纸上获取数据,并使用Range.SpecialCells()方法查找要复制和粘贴的相应行。 但是,如果我使用Rows().SpecialCells()或者如果我使用了SpecialCells返回的范围的row属性,则行数是错误的。 这就是我的意思:

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

这段代码产生大约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

结果产量为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

结果也产生4。 这两者当然都是错的。 我有45k行数据,我可以看到使用过滤器显示至少几千个。 这些陈述之间是否存在某些意义上的差异? 我希望它们在这里的上下文中几乎相同。

谢谢 !

这与SpecialCells无关,而是Excel如何计算行数。 Rows.Count返回计算范围内每个连续Area的计数。 例如,在立即窗口中:

? range("a2:a3,a5:a7").cells.Count

返回5

? range("2:3,5:7").rows.Count

返回2

? range("2:3,5:7").areas(1).rows.Count

返回2

? range("2:3,5:7").areas(2).rows.Count

返回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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM