繁体   English   中英

Excel公式检查单元格内容

[英]Excel formula to check cell contents

我正在尝试在运行时(huzzah)中为外接程序(double huzzah)创建一些条件格式,并且发现,显然,某些功能无法像正常工作表中那样使用。 (尝试创建引用我可以在单元格中调用的VBA函数的CF时,我只是收到一个无效的过程调用错误5,即使它位于加载项中而不是工作簿中;我也可以使用内置的我在这里找到的最清楚的确认是在这里 ,但它并没有真正解释问题所在; 那是深奥的部分,很想听听我对此的期望。

遇到的难题是:我是否可以完全避免使用VBA,并使用一系列仅限Excel的内置函数来验证给定单元格是否包含常数(即,用户输入的值),公式(例如某种计算,逻辑运算等-大部分以=开头,或链接(即对另一个工作表或另一个工作簿中单元格的引用)? 我知道Excel可以一触即发。 见证GoTo / Special的用途和速度。 但是该怎么办呢?

在此先感谢您的帮助。

针对Excel 2013更新:

对于Office版本2013和更高版本,可以使用ISFORMULA¹功能。 将此与NOT函数, AND函数以及COUNTBLANKISBLANKLEN函数结合使用,可以产生确定单元格是否包含常数的公式。

E2:F2中的标准公式为

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

ISFORMULA_update

如果需要有关单元格值性质的更多信息,则可以使用TYPE函数确定单元格内容是数字,文本,布尔值,错误还是数组。

当一起使用时,此处讨论的本机工作表函数可以重现VBA的Range.SpecialCells方法及其xlCellTypeConstantsxlCellTypeFormulas xlCellType枚举可用的结果。


¹ISFORMULA函数是Excel 2013引入的。在早期版本中不可用。

不确定这是否是您想要的,但似乎可以满足您的要求,至少其中一些要求。

http://www.ozgrid.com/VBA/special-cells.htm

这是range.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查找包含任何常量的单元格

在这种情况下,范围是选择,但您可以设置为所需的范围,即range(“ 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"

工作表上的goto特殊功能对其某些功能使用了特殊单元格方法。

它还使用其他人。 在最后5行代码中,我更改了工作表,并要求它转到对象。

并不是真的。 它只是选择它们。

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

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

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

我不知道要按单元格类型选择的任何其他功能,但是我只是个新手,因此它很容易出现,因此我不知道。

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

例如

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

Function IsLink(Check_Cell As Range)

  If InStr(1, Check_Cell.Formula, "!", vbTextCompare) Then
   IsLink = Check_Cell.HasFormula
  End If
End Function

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

您可以组合这些并创建一个字符串输出“ Formula”,“ Link”,“ Value”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM