选中包含具有常量的公式的单元格

我正在为Excel 2007中的预算工作。它是由其他人编写的,包含许多工作表和许多公式。 我正在尝试通过创build一个input工作表来使电子表格更加高效,在这个工作表中input所有/大部分常量。 为了帮助这个过程,我希望能够突出显示所有包含常量的公式,并突出显示我select的所有常量(不在公式中)。 或者,如果更容易,相反,突出显示在我的select中不包含常量的所有公式。 我主要处理数字,而不是文本。

下面是公式(=) 常量常量的例子:

  1. = 82000-50000
  2. = $ A $ 2- 50000
  3. = A2-50000
  4. = F133 *** 05 **
  5. 50000

以下是不包含常量的公式(=)的示例:

  1. = SUM(E8:P8)
  2. = $ C $ 51 *'服务细节'!$ E $ 181
  3. = K152

我能find我的问题最接近的答案是在这里: 如何确定一个单元格公式是否包含常量? 。 但是我相信这个post是专门针对在Siddharth Rout在他最后的评论中澄清的一个公式中find引用。

任何帮助将不胜感激。 谢谢。 (这是我的第一篇文章,希望我的格式正确,提前道歉)

您可以使用VBA中的SPLIT函数来分析公式。 例如下面的代码适用于你给出的例子。 如果公式包含常量,则返回TRUE,如果不是公式则返回N / A,否则返回FALSE。

可能你必须适应一点,所有的情况下都能正常工作,但这是一个很好的起点。

 Function HasConstant(r As Range) As Variant Application.Volatile Dim formula As String Dim delimiters() As String Dim delimiter As Variant Dim Components() As String Dim component As Variant Dim chars As Integer delimiters() = Split("+ - * / = & ( ) ,") If r.HasFormula Then formula = Right(r.formula, Len(r.formula) - 1) Do Until formula = "" chars = Len(formula) component = formula For Each delimiter In delimiters Components = Split(formula, delimiter) If Len(Components(0)) < chars And Len(Components(0)) > 0 Then component = Components(0) chars = Len(component) End If Next If IsNumeric(Replace(component, ".", Application.International(xlDecimalSeparator))) Then 'IsNumeric(component) HasConstant = True Exit Function ElseIf Left(CStr(component), 1) = Chr(34) And Right(CStr(component), 1) = Chr(34) Then HasConstant = True Exit Function End If If chars < Len(formula) Then formula = Right(formula, Len(formula) - chars - 1) Else formula = "" End If Loop Else HasConstant = CVErr(xlErrNA) Exit Function End If HasConstant = False End Function 

例:

在这里输入图像说明