Excel按逻辑评估文本 [英] Excel Evaluate Text as Logical

查看:12
本文介绍了Excel按逻辑评估文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过连接操作数和运算符来计算逻辑表达式。在Excel 2016中,有没有类似于VALUE()从文本转换为数字的公式?我正在寻找一种解决方案,这样我就可以动态更改条件,而无需更改实际的Excel公式。我已经搜索并阅读了Excel函数说明,但没有任何解决方案。

'The operands and operator
A1: 1
A2: >
A3: 0

'Concatenation
B4: =CONCAT(A1:A3) 'This evaluates to 1>0
B5: =A1&A2&A3 'This also evaluates to 1>0

'Some checks
C4: =ISTEXT(B4) 'This evaluates to TRUE.
C5: =ISTEXT(B5) 'This also evaluates to TRUE
D4: =ISLOGICAL(B4) 'This evaluates to FALSE
D5: =ISLOGICAL(B5) 'This also evaluates to FALSE

'Vain attempts
E4: =AND(B4,TRUE) 'This ALWAYS is TRUE, even when my desired output is FALSE
E5: =OR(B5) 'This spits out a #VALUE! error

由于我正在寻找有活力的解决方案,因此我希望避免
=IF(A2=">",A1>A3,FALSE)。我也希望避免使用UDF,但如果不存在将逻辑表达式转换为文本并将其计算为逻辑表达式的内置函数,我愿意这样做。

推荐答案

若要编写可处理范围或变量/字符串输入的调用EVALUATE的UDF,请尝试以下操作:

Function L(exp As Variant) As Variant
    Dim vExp As Variant

    vExp = exp
    L = Application.Evaluate(vExp)
End Function

它为什么起作用?

vExp = exp实现了魔力。如果exp是一个范围,则分配使用默认的.Value属性并作为变量/字符串进行复制(因为我们没有使用Set)。如果它是变体/字符串,则它是直接副本。

它确实有使用Application.Evaluate的缺点(如所述的缺点 here)


也可以处理从VBA调用的可能性的版本,请尝试

Function L(exp As Variant) As Variant
    If TypeName(exp) = "Range" Then
        L = exp.Worksheet.Evaluate(exp.Value)
    Else
        If IsError(Application.Caller) Then
            'Calls from VBA are hanbled here.
            ' Note: Best to fully qualify any range references in exp
            ' to avoid unexpected references to the active sheet
            L = ActiveSheet.Evaluate(exp)
        Else
            L = Application.Caller.Worksheet.Evaluate(exp)
        End If
    End If
End Function

这篇关于Excel按逻辑评估文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆