gpt4 book ai didi

vba - Range.SpecialCells 具有不同的结果

转载 作者:行者123 更新时间:2023-12-02 15:35:36 30 4
gpt4 key购买 nike

这又是一个奇怪的事情。

我有这段代码,它使用过滤器从一张工作表中获取数据,并使用 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

关于vba - Range.SpecialCells 具有不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13400867/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com