Excel公式来检查单元格内容

我试图在运行时(huzzah)为加载项(double huzzah)创build一些条件格式,并且发现显然有些函数不能像在普通工作表中那样使用。 (我试图创build一个引用VBA函数的CF时,我只是得到一个无效的过程调用错误5,即使它在加载项而不是工作簿中,我可以在单元中调用它;我可以使用内置函数创buildCF罚款, )我发现的最清晰的确认是在这里 ,但它并不能真正解释问题是什么; 这是深奥的部分,我很想听到更多关于我可以期待的事情。

橡胶符合道路的一部分是:我可以完全避免VBA,并使用一系列仅限Excel的内置函数来validation给定单元格是否包含常量(即由用户input的值),公式(即某种计算,逻辑运算等 – 几乎从一个=)开始,或者是一个链接(即对另一个工作表或另一个工作簿中单元格的引用)? 我知道Excel有这个决心在它的指尖; 见证GoTo / Special的使用和速度。 我怎样才能得到呢?

在此先感谢您的帮助。

针对Excel 2013更新:

对于Office版本2013及更高版本,可以使用ISFORMULA¹function。 结合NOT函数, AND函数和COUNTBLANK , ISBLANK或LEN函数可以产生一个公式来确定单元是否包含一个常量。

E2:F2中的标准公式是,

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

ISFORMULA_update

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

在协同使用时,这里讨论的本地工作表函数可以重现从VBA的Range.SpecialCells方法及其xlCellTypeConstantsxlCellTypeFormulas xlCellType枚举中获得的结果。


¹ISFORMULAfunction是在Excel 2013中引入的,在早期版本中不可用。

Excel的2013

我不认为你可以完全避免VBA,但你可以创build一个简单的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和FALSE中有公式,则IsFormula(A1)将返回TRUE,否则=如果A1中包含“!”的公式,IsLink(A1)将返回TRUE。 否则FALSE

你可以结合这些并创build一个string输出“公式”,“链接”,“价值”

不知道这是你想要的,但它似乎做你所问的,至less有一些。

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 

你select一个范围,然后执行这个macros,它将返回那些符合要求的单元格的地址。

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

在这种情况下的范围是select,但你可以设置为你想要的,即范围(“a1:b5”)等

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

显然它也使用了range.special方法。

我用loggingmacros选项,这就是我得到的。

 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特殊function使用了特殊的单元格方法。

它也使用其他人。 在最后5行代码中,我改变了工作表,并要求它去对象。

这不是真的去他们。 它只是select它们。

工作表CP包含对象,并使用最后3行中的代码来select工作表上的所有对象。

最好的办法是查看后面的代码,以便logging一个macros,然后在工作表中使用goto / specialfunction。

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

我不知道任何其他function可以通过单元格的types来select,但是我只是一个newby,所以它可以很容易地在那里,而不被我知道。