IF 在应该返回 TRUE 时返回 FALSE

Posted

技术标签:

【中文标题】IF 在应该返回 TRUE 时返回 FALSE【英文标题】:IF returns FALSE when it sould return TRUE 【发布时间】:2019-03-29 09:55:04 【问题描述】:

我试图做这样的事情

sub test()
a=inputbox("value1:")
b=inputbox("value2:")
c=inputbox("value3:")

  if a<b and a>c then 

    msgbox(a)

    else
      msgbox(b)
      msgbox(c)
   end if

end sub 

当我为 a 输入 5、为 b 输入 10 和为 c 输入 2 等值时,条件应返回 TRUE,然后显示带有 a 的消息框,但它返回 FALSE 并显示带有 b 和 c 的消息框。我认为解决方案非常简单,但我无法弄清楚。

非常感谢

【问题讨论】:

使用 a=CLng(inputbox("value1:")) 等将字符串转换为长整数(如果您希望不是整数值,则使用 CDbl()) 变量有哪些类型?您应该养成使用Dim 声明它们的习惯。使用Option Explicit 强迫自己这样做。如果您已将它们声明为数字类型,那么这将不是问题。 【参考方案1】:

您的 InputBox 正在返回看起来像数字的字符串,并且 "5" 不小于 "10"。执行以下操作之一:

Dim a as long, b as long, c as long 将 Application.InputBox 与 Type:=1 参数一起使用。 将字符串转换为实数,例如a=clng(inputbox("value1:"))if int(a)&lt;int(b) and int(a)&gt;int(c) then

【讨论】:

【参考方案2】:

这是因为 VBA 将您的输入视为字符串。只需在变量中添加 CInt() 或 CLng() 即可知道它们是数字的。

Sub test()

a = CInt(InputBox("value1:"))
b = CInt(InputBox("value2:"))
c = CInt(InputBox("value3:"))

  If a < b And a > c Then
    MsgBox (a)

    Else
      MsgBox (b)
      MsgBox (c)
   End If
End Sub

【讨论】:

【参考方案3】:

其他两个答案非常好,我会最终使用 Jeeped 的显式变量声明方法 (Dim a as long, b as long, c as long)。

虽然我从不建议不声明变量——你发现这样做总是好的做法——你也可以简单地将输入框乘以 1。

这只是使用乘法的幂将字符串强制为数值的另一个技巧(这是在工作表公式中使用的类似技巧,使用双负--() 将值转换为数字)。

a = InputBox("value1:") * 1
b = InputBox("value2:") * 1
c = InputBox("value3:") * 1

If a < b And a > c Then

    MsgBox (a)

Else

    MsgBox (b)
    MsgBox (c)

End If

【讨论】:

以上是关于IF 在应该返回 TRUE 时返回 FALSE的主要内容,如果未能解决你的问题,请参考以下文章

当返回值应该为 true 时,二分查找一直返回 false

Vee 验证返回 true,但应该返回 false

在javascript中返回一个字符串

布尔结果显示为FALSE,应返回TRUE

js中各种类型的变量在if条件中是true还是false

关于javascript函数中if语句的问题 - if语句返回true但函数返回false如何