用于检查单元格内容的Excel公式

用于检查单元格内容的Excel公式,excel,excel-addins,vba,excel-2013,Excel,Excel Addins,Vba,Excel 2013,我正在尝试为外接程序(double huzzah)创建一些运行时条件格式(huzzah),并发现,显然,有些函数不能像在普通工作表中那样使用。(我只是在尝试创建引用单元格中可以调用的VBA函数的CF时遇到了一个无效的过程调用错误5,即使它在外接程序中而不是工作簿中;我可以使用内置函数创建CF。)我发现最明确的确认是,但它并没有真正解释问题所在;这是最深奥的部分,我很想听到更多关于我对这个的期望 rubber meets road部分是:我是否可以完全避免VBA,只使用一系列内置的Excel函数来

我正在尝试为外接程序(double huzzah)创建一些运行时条件格式(huzzah),并发现,显然,有些函数不能像在普通工作表中那样使用。(我只是在尝试创建引用单元格中可以调用的VBA函数的CF时遇到了一个无效的过程调用错误5,即使它在外接程序中而不是工作簿中;我可以使用内置函数创建CF。)我发现最明确的确认是,但它并没有真正解释问题所在;这是最深奥的部分,我很想听到更多关于我对这个的期望

rubber meets road部分是:我是否可以完全避免VBA,只使用一系列内置的Excel函数来验证给定单元格是否包含常量(即用户输入的值)、公式(即某种计算、逻辑运算等——基本上以=)或链接(即,对另一工作表或另一工作簿中某个单元格的引用)?我知道Excel已经掌握了这一决定;亲眼目睹GoTo/Special的使用和速度。但我如何才能做到这一点


提前感谢您的帮助。

不确定这是否是您想要的,但它似乎满足了您的要求,至少部分满足了您的要求

这是
范围.specialcells
方法

它返回的范围仅包含常量或公式等

下面显示了如何使用此代码的示例:

Sub CheckForConstants()
    Dim x As Range
    Set x = Selection.SpecialCells(xlCellTypeConstants, xlNumbers)
    MsgBox "address of cells that contain numbers only is " & x.Address
    Set x = Selection.SpecialCells(xlCellTypeConstants)
    MsgBox "address of cells that contain constant of any type is " & x.Address
End Sub
选择一个范围,然后执行此宏,它将返回满足要求的单元格的地址

第一个x查找只包含数字的单元格。 第二个x查找包含任何常量的单元格

本例中的范围是selection,但您可以设置为所需的范围,即范围(“a1:b5”)等

我回到工作表,使用goto特殊方法

显然,它也使用range.special方法

我使用了录制宏选项,这就是我得到的

Selection.SpecialCells(xlCellTypeConstants, 23).Select
    Range("M7").Select
    Selection.SpecialCells(xlCellTypeFormulas, 23).Select
    Range("I6:J16").Select
    Selection.SpecialCells(xlCellTypeConstants, 1).Select
    Range("L9").Select
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    Sheets("CP").Select
    Application.CutCopyMode = False
    Range("I21").Select
    ActiveSheet.DrawingObjects.Select
    Application.Goto Reference:="GoToSpecialRoutine"
工作表上的“转到”特殊功能使用“特殊单元格”方法执行某些操作

在最后5行代码中,我更改了工作表并要求它转到对象

它并不是真的属于他们,它只是选择了他们

工作表CP包含对象,它使用最后3行中的代码选择工作表上的所有对象

要查看goto special背后的代码,最好记录一个宏,然后在工作表中使用goto/special功能

完成后,停止录制并查看录制的宏


我不知道有什么其他功能可以按单元格类型选择,但我只是一个新手,所以它很容易出现,我不知道。

我不认为您可以完全避免VBA,但您可以创建一个简单的UDF并在Excel中使用它

乙二醇

=IsFormula(A1)如果A1中有公式,则返回TRUE,否则返回FALSE =如果A1中有包含“!”的公式,则IsLink(A1)将返回TRUE,否则返回FALSE

您可以将它们组合起来,创建字符串输出“公式”、“链接”、“值”

对于Office 2013及更高版本,可以使用ª函数。将其与函数、函数和、或函数结合,可以生成一个公式来确定单元格是否包含常量

E2:F2中的标准公式为

=ISFORMULA(D2)
=AND(NOT(ISFORMULA(D2)), LEN(D2))

如果需要有关单元格值性质的进一步信息,可以使用确定单元格内容是数字、文本、布尔值、错误还是数组

当协同使用时,此处讨论的本机工作表函数可以复制VBA及其xlCellTypeConstantsxlCellTypeFormulas枚举的可用结果


该功能是在Excel 2013中引入的。在早期版本中不可用


如果常数是字符串,则CELL()函数可能会很有用,请参见:(使用CELL(“type”,A1),其中A1是您的单元格。)我不确定您的问题中的“公式”和“链接”之间有什么区别。是的,我知道CELL函数,谢谢——它是从这开始的,但它(a)在大范围内速度慢,(b)不够具体。在我的命名法中,所有的链接都是公式,但不是所有的公式都是链接。一个非常简单的例子:这是一个公式:=SUM(A1:A5)这是一个链接:=SUM(A1:A5,Sheet1!B6)如果实际使用的单元格在运行时之前可能是未知的,您对间接引用的期望是什么就我的目的而言,间接()公式的使用构成了一个公式,而不是一个链接。我不想构建一个跟踪例程。Excel完全知道单元格的“公式”表示某种计算或常量值。该信息不作为公式向用户公开这一事实令人沮丧且愚蠢。确定“链接”所需的一切状态是公式中的一个感叹号。同样,这并不困难……只要您能够真正读取公式字符串。谢谢,但正如上面问题的粗体部分所述,解决方案必须是Excel和内置的,而不是VBA。我有VBA函数来确定这些单元格内容类型(常量、公式、带链接的公式)很好。原始帖子解释了原因。谢谢,但正如原始帖子所述,您不能调用VBA函数(我也写过)用于外接程序的条件格式。您不必调用函数。强制Excel重新计算,自定义项应自动更新。这有什么帮助?我正在尝试设置条件格式,而不是将自定义项放入单元格。如果自定义项位于Excel外接程序中,则无法在条件格式公式调用中嵌入自定义项。我建议您尝试;它会产生以下错误:“您不能将对其他工作表或工作簿的引用用于条件格式设置条件。”,
Function IsLink(Check_Cell As Range)

  If InStr(1, Check_Cell.Formula, "!", vbTextCompare) Then
   IsLink = Check_Cell.HasFormula
  End If
End Function
=ISFORMULA(D2)
=AND(NOT(ISFORMULA(D2)), LEN(D2))