[英]Excel formula to check cell contents
我正在尝试在运行时(huzzah)中为外接程序(double huzzah)创建一些条件格式,并且发现,显然,某些功能无法像正常工作表中那样使用。 (尝试创建引用我可以在单元格中调用的VBA函数的CF时,我只是收到一个无效的过程调用错误5,即使它位于加载项中而不是工作簿中;我也可以使用内置的我在这里找到的最清楚的确认是在这里 ,但它并没有真正解释问题所在; 那是深奥的部分,很想听听我对此的期望。
遇到的难题是:我是否可以完全避免使用VBA,并使用一系列仅限Excel的内置函数来验证给定单元格是否包含常数(即,用户输入的值),公式(例如某种计算,逻辑运算等-大部分以=开头,或链接(即对另一个工作表或另一个工作簿中单元格的引用)? 我知道Excel可以一触即发。 见证GoTo / Special的用途和速度。 但是我该怎么办呢?
在此先感谢您的帮助。
对于Office版本2013和更高版本,可以使用ISFORMULA¹功能。 将此与NOT函数, AND函数以及COUNTBLANK , ISBLANK或LEN函数结合使用,可以产生确定单元格是否包含常数的公式。
E2:F2中的标准公式为
=ISFORMULA(D2)
=AND(NOT(ISFORMULA(D2)), LEN(D2))
如果需要有关单元格值性质的更多信息,则可以使用TYPE函数确定单元格内容是数字,文本,布尔值,错误还是数组。
当一起使用时,此处讨论的本机工作表函数可以重现VBA的Range.SpecialCells方法及其xlCellTypeConstants或xlCellTypeFormulas 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.