我试图找出如何做一个嵌套的IF
和ISBLANK
公式来显示文本,如果它不是空白。
到目前为止我有这个:
=If(Not(ISBLANK(SCB!A8)),”X”,If(Not(ISBLANK(Voda!A8),”Y”,If(Not(ISBLANK(Fixnetix!A8),”A”,If(Not(ISBLANK(IOW!A8),”B”,”No open cases")
虽然它没有工作,我试图从其他4个不断变化的工作簿中提取数据。
我的理论是:
这些是我的变量
您的尝试中存在一些语法问题。
以下是我认为会解决的问题:
=IF(NOT(ISBLANK(SCB!A8)),”X”,IF(NOT(ISBLANK(Voda!A8)),"A",IF(NOT(ISBLANK(Fixnetix!A8)),"Y",IF(NOT(ISBLANK(IOW!A8)),"B","No OpenCases"))))
基本上你错过了几个括号和一个结束语。特别是,你的几个内部NOT(ISBLANK())
组合缺少第二个结束语。
在某些时候,随着公式的长度增加,使用这些复杂操作的常规公式会适得其反并充满错误。
一旦达到一定程度的复杂性,我倾向于切换到用户定义的函数,以便我可以简化公式并将复杂性封装在一个地方。
以下功能将满足您的需求:
Function FirstMatch(DefaultVal As String, ParamArray Params() As Variant) As String
Application.Volatile (True)
Dim i As Integer
FirstMatch = DefaultVal
For i = LBound(Params) To UBound(Params) Step 2
If Range(Params(i)).Value <> "" Then
FirstMatch = Params(i + 1)
Exit For
End If
Next
End Function
将该函数放入工作表后,调用它的公式变得更加简单:
=FirstMatch("No open cases", "SCB!A8", "X", "Voda!A8", "Y", "Fixnetix!A8", "A", "IOW!A8", "B")
它只需将返回值设置为默认值,然后依次处理每对字符串即可。如果该对中的第一个不是空白,则将返回值设置为秒并返回。否则它将继续前进,直到找到匹配或它用尽可能性。
如果它确实用尽了,则返回默认返回值。
请记住,有很多可能来改进代码,例如使空白检测更加智能化(允许任何空白空间而不是需要完全空的单元格)或者如果参数计数错误则引发某种显式错误(没有相应值的悬挂单元格,但显示的代码应该是一个好的开始。