【问题标题】:boolean variable being returned by UDF is not recognized by stock Excel OR function由 UDF 返回的布尔变量不被股票 Excel OR 函数识别
【发布时间】:2014-05-12 22:25:23
【问题描述】:

好的,我写了一个 UDF,它在给定的单元格中搜索特定的子字符串。 如果在单元格中找到子字符串,则返回 TRUE,如果未找到,则返回 FALSE。

这是 UDF 的代码(命名为 contains 函数)

Function contains(substring As String, testString As String) As String
'testString = cell to be tested for substring
Dim result As Boolean
result = False
testString = UCase(testString)
substring = UCase(substring)

For i = 1 To Len(testString)
If Mid(testString, i, Len(substring)) = substring Then result = True
Next

contains = result

End Function

我创建这个函数的原因是我可以将它嵌套在常用的 Excel 函数中,主要是 IF 函数、AND functionS 和 OR 函数。

但是,当我将它与 OR 函数一起使用时,OR 函数似乎无法“识别” =contains 函数的结果。

这是 Excel 中问题的屏幕截图:

编辑这是上面图片中 =contains 函数的作用=contains("Hello",A2)

显然,由于 C 列中的 =Contains 函数返回 True,因此 D 列中的 OR 函数也应该返回 True。但由于某种原因,就好像股票 Excel OR 函数无法识别我的 contains 函数的结果。

【问题讨论】:

    标签: vba excel boolean excel-2007


    【解决方案1】:

    让函数返回一个boolean:

    Function contains(substring As String, testString As String) As boolean
    

    不知道你为什么要这样循环,你可以使用:

    contains = InStr(1, testString, substring, vbTextCompare) > 0
    

    【讨论】:

    • 太棒了!现在我修改了函数以返回一个布尔值,它工作得很好。我最初的印象是函数返回一个布尔值,因为该函数返回变量result,它的类型是Boolean
    • 是函数声明中的as决定了最终的类型,
    • 我使用了一个循环,因为我不知道InStr 函数的存在,但我会记住它以备不时之需。
    • @AdamJ 而不是 UDF 包装器,您可以考虑使用 =FIND(),它相当于 InStr()
    • 谢谢,我以前用过它来测试一个单元格中的字符串,但我喜欢我的 UDF,因为它返回一个布尔值并且很容易嵌套在 IF 函数中。 ——
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多