Excel公式 - 检查单元格是否有公式

5
你想知道如何检查另一个单元格是否包含公式?例如,我有两列,A列中的单元格包含公式或值。(通常情况下,A列包含公式,但其他用户会通过直接输入并替换先前存在的公式来更改其值)。在B列中,我想添加一个公式,如果A列上的单元格包含公式,则显示“HasFormula”,如果包含值,则显示“PlainValue”。我认为可以使用=ISNUMBER(),但这可能不准确。我正在使用Excel 2010。

1
不知道你是否尝试过 Ctrl+`?这是 Ctrl 键和“反引号”(小写波浪线)一起按的组合键。 - user4039065
4个回答

9

实际上,Excel内置了ISFORMULA()函数。

假设A1单元格有一个公式,您想要检查它。在B1中,您可以使用以下公式:

=If(ISFORMULA(A1),"HasFormula","PlainValue")

编辑:根据您的评论,您没有ISFORMULA()。一种替代方法是创建一个快速UDF,并在工作表中使用自定义函数。

在工作簿模块中,输入以下代码:

Function isFormula(ByVal target As Range) As Boolean
     isFormula = target.hasFormula
End Function

然后你可以像这样调用它:=isFormula(A1),如果A1有一个公式,它将返回TRUE

如果您无法使用VBA,则可以使用此公式:=IF(ISERROR(FORMULATEXT(A1)),"PlainText","HasFormula")


1
@jay - 你是否接受使用 VBA 的方案?我编辑了这篇帖子,并添加了一个快速的 UDF 函数,可以执行与“ISFORMULA()”相同的操作。 - BruceWayne
3
最好的实践方法是提及你所指的函数(例如ISFORMULA)是在Excel 2013中引入的,FORMULATEXT也是如此。 - user4039065
1
@Jeeped 哦,天啊!我没意识到 Formulatext 是2013年的。...好吧。我想Scott之前发布了一个公式的答案(如果OP不能使用VBA),但他删除了它,也许他也用了 formulatext,我记不清了。谢谢你指出这一点! - BruceWayne
我曾经在使用AGGREGATE(Excel 2010引入)时添加脚注,但现在2010似乎成为了事实上的标准,所以我停止了添加该注释。 - user4039065
不好意思,我的 Excel 2010 没有 FORMULATEXT() 函数。 - jay
显示剩余3条评论

1
您可以使用 Range.HasFormula 属性。

https://learn.microsoft.com/en-us/office/vba/api/excel.range.hasformula

编辑:

以上链接中的文本和代码:

"如果范围内所有单元格都包含公式,则为True;如果范围内没有单元格包含公式,则为False;否则为空。只读变体。..."

Worksheets("Sheet1").Activate 
Set rr = Application.InputBox( _ 
    prompt:="Select a range on this worksheet", _ 
    Type:=8) 
If rr.HasFormula = True Then 
    MsgBox "Every cell in the selection contains a formula" 
End If

这基本上是一个仅链接答案。尝试添加更多解释和可能的相关代码示例(即使从链接中复制也很有用)。 - Anthony
我现在注意到@BruceWayne已经提到了“hasFormula”属性。 - F W

1
MrExcel网站(下面链接)有这种方法,它使用来自Excel 4的旧代码(为了向后兼容而仍然存在)...
定义一个名为“CellToLeftHasFormula”的名称,并在“引用”框中放置...

=GET.CELL(48,OFFSET(INDIRECT("RC",FALSE),0,-1))

然后在B列使用公式=CellToLeftHasFormula,如果有公式,则会返回TRUE。

请注意,这将意味着您的Excel现在将包含宏,因此需要保存为xlsm格式。我在Excel 2010中使用此功能。

有关完整解释(以及除48之外的其他.CELL选项),请参见MrExcel链接:https://www.mrexcel.com/forum/excel-questions/20611-info-only-get-cell-arguments.html


0

您可以通过保护A列来限制用户。

您可以使用快捷键Ctrl + `直接检查单元格是否包含公式。

您可以使用VBA编写自定义函数: 1. 按下alt + F11 2. 在工作簿中插入模块 3. 粘贴此代码

Function IsFormula(cell_ref As Range) 
IsFormula = cell_ref.HasFormula 
End Function

4. 现在,您可以在任何需要的单元格中使用 Isformula 函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接