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

时间:2010-10-18 22:08:48

标签: excel excel-vba excel-addins vba

我正在尝试在运行时(huzzah)为加载项(双huzzah)创建一些条件格式,并且发现显然某些函数不能像在普通工作表中那样使用。 (当我尝试创建引用我可以在单元格中调用的VBA函数的CF时,我只得到一个无效的过程调用错误5,即使它在加载项而不是工作簿中;我可以使用内置函数创建CF罚款在函数中。)我发现的最明确的确认是here,但它并没有真正解释问题是什么;这是深奥的部分,我希望能够更多地了解我对此的期望。

橡胶与道路部分是:我可以完全避免使用VBA,并使用一系列仅限Excel,内置函数来验证给定单元格是否包含常量(即用户输入的值),公式(即某种计算,逻辑运算等 - 几乎以=开头),或链接(即对另一工作表或其他工作簿中的单元格的引用)?我知道Excel有这个决心触手可及;见证GoTo / Special的用途和速度。 怎么能得到它呢?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

<强> Updated for Excel 2013:

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

E2:F2中的标准公式是

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

ISFORMULA_update

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

在协同使用时,此处讨论的本机工作表函数可以重现VBA的Range.SpecialCells method及其 xlCellTypeConstants xlCellTypeFormulas xlCellType枚举中提供的结果

¹ Excel 2013引入了ISFORMULA功能。早期版本不提供此功能。

答案 1 :(得分:0)

不确定这是否是你想要的,但它似乎做了你要问的,至少有一些。

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

这种情况下的范围是选择,但你可以设置你想要的,即范围(“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背后的代码是录制宏,然后使用工作表中的转到/特殊功能。

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

我不知道按照单元格的类型选择任何其他功能,但我只是一个新手,所以它可以很容易地在那里,我不知道。

答案 2 :(得分:0)

我认为你不能完全避免使用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”