Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 13615|回复: 27

[分享] 【烟花原创】VBA零基础之第14篇 IF...Then..Else语句

[复制链接]
发表于 2013-11-8 00:21 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2013-12-4 09:02 编辑

    前面讲了过程的声明,变量和常量的声明,以及赋值语句。今天咱们聊聊IF…Then…Else语句
    在工作表中,写公式时大家对IF函数应该不陌生,根据条件的不同,返回不同的值。
    VBA中,我们通过使用IF语句实现根据表达式的值有条件的执行一组语句

    语法
    单行形式
    IF 条件 Then 语句1 Else 语句2
    条件一般为数据表达式或字符串表达式,其运算结果为TrueFalse

    在没有Else子句时,语句1则为必选参数。有Else语句时语句2则为必选参数
    Dim a As Integer, b As Integer
    a= 10
    b= 20
    If a > b Then Else MsgBox "a小于b"
    Rem 省略语句1
   If a < b Then MsgBox "a大于b"
    REM 省略了ELSE子句
    IF a=b then msgobx "a等于b“ else msgbox "a不等于b”
    REM 语句1,语句2都具备。
  
   在单行模式下也可以执行多条语句。要求所有的语句必须在同一行上并且以冒号分开
    Dim a As Integer, b As Integer, c As Boolean
   a= 10
   b= 20
   If a > b Then Else MsgBox "a<b": c = a > b

   块形式
   提供更强的结构化与适应性,并且通常也是比较容易阅读、维护及调试。
    要决定某个语句是否为一个 If 块,可检查 Then 关键字之后是什么
   如果在 Then 同一行之后,还有其它非注释的内容,则此语句就是单行形式的 If 语句。

   简单的IF块:
   If 条件 Then
      语句1
      
   End if
    例如:
    Dim a As Integer, b As Integer
    a= 10
    b= 20
    If a > b Then
      MsgBox "a小于b"
   End IF

   复杂的IF块
   If 条件 then
         语句1
   Elseif 条件2 Then
      语句2
   Elseif 条件3 Then
      语句3
   Else
      其他语句
   End if

   当程序运行到一个 If 块,条件1 将被测试。如果条件1 True,则在 Then 之后的语句会被执行。
   如果条件1 False,则每个 ElseIf 部分的条件式(如果有的话)会依次计算并加以测试。
   如果找到某个为 True 的条件时,则其紧接在相关的 Then 之后的语句会被执行。
   如果没有一个 ElseIf 条件式为 True(或是根本就没有 ElseIf 子句),则程序会执行 Else 部分的语句。
   而在执行完 Then Else 之后的语句后,会从 End If 之后的语句继续执行。
   Else ElseIf 子句都是可选的。在 If 块中,可以放置任意多个ElseIf 子句,但是都必须在 Else 子句之前。

   例如:
   Dim lChenji As Byte
   Dim strResult As String

    lChenji = 50
    If lChenji > 90 Then
          '条件1:成绩是否大于90
       strResult = "优秀"
   ElseIf lChenji > 80 Then
       '条件2:成绩是否大于80
       strResult = "良好"
   ElseIf lChenji >= 60 Then
       '条件3:成绩是否大于等于60
       strResult = "及格"
    Else
          '所有以上条件都不满足时,不及格
       strResult = "不及格"
    End If
   MsgBox strResult


   另外If 块也能像IF函数实现嵌套,还是上面的例子,改成IF嵌套
   Dim lChenji As Byte
   Dim strResult As String

   lChenji = 80
   If lChenji >= 60 Then
      '先判断成绩是否及格
      If lChenji > 90 Then
         '子条件1:成绩是否大于90分
         strResult = "优秀"
      ElseIf lChenji > 80 Then
         '子条件2:成绩是否大于80分
         strResult = "良好"
      Else
         '上述子条件不满足的情况下
         strResult = "及格"
      End If
   Else
      '不及格
      strResult = "不及格"
   End If
   MsgBox strResult

   在IF多重判断的情况下,对于条件的使用一定要严谨。

评分

参与人数 2 +12 学分 +2 收起 理由
maoboybaba + 2 学习
zhp3 + 12 赞一个!

查看全部评分

发表于 2013-11-8 22:33 | 显示全部楼层
回复

使用道具 举报

发表于 2013-12-16 08:58 | 显示全部楼层
回复

使用道具 举报

发表于 2013-12-26 22:42 | 显示全部楼层
本帖最后由 as0810114 于 2013-12-26 22:52 编辑

IF a=b then msgobx "a等于b“ else msgbox "a不等于b”   这句改一下
IF a=b then msgbox "a等于b" else msgbox "a不等于b"


If a > b Then Else MsgBox "a<b": c = a > b
这句改成这样貌似能更好的知道后面那句的执行情况
If a > b Then Else MsgBox "a<b" & Chr(10) & c: c = a > b
回复

使用道具 举报

发表于 2014-1-27 11:31 | 显示全部楼层
修炼第14集中
心得:if then else语句在一行不用加endif
多层if 可以用case 代替
受教了,谢谢
回复

使用道具 举报

发表于 2014-4-11 15:37 | 显示全部楼层
学习继续
回复

使用道具 举报

发表于 2014-4-13 14:38 | 显示全部楼层
继续支持!
回复

使用道具 举报

发表于 2014-4-24 12:19 | 显示全部楼层
老师请问  : c = a > b什么意思啊

3.jpg
回复

使用道具 举报

 楼主| 发表于 2014-4-24 12:33 | 显示全部楼层
ting668506 发表于 2014-4-24 12:19
老师请问  : c = a > b什么意思啊

:是多个语句写在一行的分隔符号
如果写成多行就得是这样:
if a>b then
else
    msgbox "a<b"
    c=a>b
end if


回复

使用道具 举报

发表于 2014-4-25 10:18 | 显示全部楼层
hwc2ycy 发表于 2014-4-24 12:33
:是多个语句写在一行的分隔符号
如果写成多行就得是这样:
if a>b then

谢谢老师  老师还有一个问题 我不知道他在什么情况执行c=a>b
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 17:17 , Processed in 0.437723 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表