Rob想知道是否有一种方法可以计算包含行或列中的公式的单元格的数量。使用Excel的“转到”功能,答案很简单。请按照下列步骤操作:

。显示要计数的工作表。

。选择要在其中计算公式的行或列。

。按F5或Ctrl + G。 Excel将显示“转到”对话框。

。单击特殊按钮。 Excel将显示“转到特殊”对话框。

(请参见图1。)

。确保已选中“公式”单选按钮。

。单击确定。

而已。 Excel选择包含公式的行或列中的所有单元格。 (如果跳过第2步,Excel将选择整个工作表中的所有公式。)在屏幕底部的状态栏中,您可以看到所选单元格数量的计数。 (请参见图2。)

image

图2.状态栏显示选定单元的数量。

如果由于某种原因在状态栏中看不到计数,则应检查以确保将状态栏配置为显示计数。

只需右键单击状态栏上的任何空白点,然后从产生的选项中选择“计数”。

如果您使用的是Excel 2013或更高版本,则还可以使用公式来计算单元格区域中的公式数量,如下所示:

=SUMPRODUCT(--ISFORMULA(A:A))

本示例返回A列中所有公式的计数。您可以轻松地在公式中替换不同范围的单元格。无论您指定什么范围,它都不应包括放置此特定公式的单元格,否则会导致循环引用和可能的错误。

如果需要,您也可以使用宏来确定计数。以下示例使用与先前步骤中手动描述的方法相同的方法来确定计数:

Sub CountFormulas1()

Dim Source As Range     Dim iCount As Integer

Set Source = ActiveSheet.Range("A:A")

iCount = Source.SpecialCells(xlCellTypeFormulas, 23).Count     ActiveSheet.Range("D1") = iCount End Sub

该子例程非常快地返回A列中所有包含公式的单元格的计数,并将该值填充到单元格D1中。

如果可以将这种方法转换为用户定义的函数,例如:

,将非常有帮助。

Function CountFormulas2(Source As Range)

CountFormulas2 = Source.SpecialCells(xlCellTypeFormulas, 23).Count End Function

但是,这不起作用。该函数始终返回“源”范围中单元格的计数,而不返回包含公式的单元格的计数。这是Excel VBA中的一个深奥错误,SpecialCells无法在功能中使用;它仅在子例程中起作用。 Microsoft甚至都没有记录(我可以找到)该记录,因此我将其称为“错误”而不是“限制”。

但是,SpecialCells方法的功能存在实际限制:它最多只能包含8,192个单元格。您可以分析更大的范围(当您查看整个列时就是这种情况),但是结果子集(结果范围)最多只能包含8,192个单元格。如果包含更多内容,则SpecialCells将“失败”并返回与原始范围中的单元格数量相等的范围(并因此返回计数)。

如果要创建用户定义的函数来确定计数,则需要依赖SpecialCells方法以外的其他方法。

这是一种使用HasFormula属性的方法:

Function CountFormulas3(Source As Range)

Dim c As Range     Dim iCount As Integer

iCount = 0     For Each c In Source         If c.HasFormula Then iCount = iCount + 1     Next     CountFormulas3 = iCount End Function

如果选择让此宏评估整个列或整个行,则准备稍等一下-宏可能需要一段时间才能遍历列或行中的每个单元格。 SpecialCells方法得出结果的速度比单步执行每个单元格快得多。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本提示(13330)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。