如果我要将 worksheet.cells 发送到该函数,它将检查整个工作表中的所有单元格,数量很多而且速度很慢。尽管 Excel 2007+ 支持 16384*1048576 行,但只有实际使用过的单元格才会加载到内存中。无需检查所有其他 170 亿个细胞。我最接近识别这些的是使用 Worksheet.UsedRange 来限制任意范围输入。但是,在使用相距较远的单元格的情况下,它并不完美。例如,如果单元格 A1 和 XFD1048576 包含数据,则整个工作表将包含在 UsedRange 中。任何有关如何将范围限制为实际使用的单元格(上例中只有两个单元格)的提示将不胜感激。
利用 UsedRange 我构建了一个函数,我将分享它以防其他人可以使用它:
Public Function CountIfFormula(ByRef rng As Range, Optional ByVal matchStr As String) As Long
'Counts the number of cells containing a formula and optionally a specific string (matchStr) in the formula itself.
Dim i As Long
Dim isect As Range
'Restricts the range to used cells (checks only cells in memory)
Set isect = Application.Intersect(rng, rng.Parent.UsedRange)
For Each cell In isect
If cell.HasFormula Then
If InStr(1, cell.Formula, matchStr) Then i = i + 1
End If
Next
CountIfFormula = i
End Function
函数的使用:
Sub GetNrOfCells()
Dim i As Long
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
i = i + CountIfFormula(ws.Cells, "=SUM(")
Next
'i will now contain the number of cells using the SUM function
End Sub
最好的问候,并感谢您的回复。
福西