如何在VBA中通过公式统计列内非公式单元格的数量?
实现方法
完全可以在VBA环境下给A11单元格写入对应公式,实现你需要的两种效果,具体方案如下:
1. 返回数字1(统计非公式单元格数量)
通过VBA给A11写入统计公式,直接返回非公式单元格的个数:
Sub CountNonFormulaCells() Range("A11").Formula = "=SUMPRODUCT(--NOT(ISFORMULA(A1:A10)))" End Sub
原理说明
ISFORMULA(A1:A10):逐个判断A1到A10的单元格是否包含公式,返回布尔值数组(TRUE=有公式,FALSE=无公式)NOT(...):反转布尔值,把“无公式”的单元格标记为TRUE--:将布尔值转换为数字(TRUE→1,FALSE→0)SUMPRODUCT:对转换后的数字求和,最终得到非公式单元格的数量(这里结果就是1)
2. 返回提示文本
如果需要返回“存在1个不符合要求的单元格”这类提示,可以写入带条件判断的公式:
Sub AddPromptText() Range("A11").Formula = "=IF(SUMPRODUCT(--NOT(ISFORMULA(A1:A10)))=0,""全部符合要求"",""存在""&SUMPRODUCT(--NOT(ISFORMULA(A1:A10)))&""个不符合要求的单元格"")" End Sub
执行后A11会直接显示预设的提示文本,当非公式单元格数量变化时,提示内容也会自动更新。
兼容旧版Excel(2013之前)
如果使用的是Excel 2013及更早版本,ISFORMULA函数不被支持,需要用宏表函数GET.CELL替代,步骤如下:
Sub CompatibilityVersion() ' 先定义名称用于判断单元格是否有公式 ThisWorkbook.Names.Add Name:="CellHasFormula", RefersTo:="=GET.CELL(48,INDIRECT(""RC"",FALSE))" ' 给A11写入统计公式 Range("A11").Formula = "=SUMPRODUCT(--NOT(CellHasFormula))" End Sub
注意:使用宏表函数需要启用宏,文件需保存为.xlsm格式。
内容的提问来源于stack exchange,提问作者madQuestions
相关产品推荐
相关产品推荐

