如果返回TRUE,则IF返回FALSE

时间:2018-10-24 21:34:34

标签: excel vba conditional-statements

我试图做这样的事情

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 

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

非常感谢

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

发生这种情况是因为VBA将您的输入视为字符串。只需将CInt()或CLng()添加到变量即可,以使Excel知道它们是数字。

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

答案 2 :(得分:1)

另外两个答案非常好,我将最终采用吉普车的显式变量声明方法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