1、条件判断语句条件判断语句一、IIf函数(三个参数都为必选参数,这有别于IF函数)语法:IIf(expr, truepart, falsepart)部分描述expr必要参数。用来判断真伪的表达式。truepart必要参数。如果 expr 为 True,则返回这部分的值或表达式。falsepart必要参数。如果 expr 为 False,则返回这部分的值或表达式。说明由于 IIf 会计算 truepart 和 falsepart,虽然它只返回其中的一个。因此要注意到这个副作用。例如,如果 falsepart 产生一个被零除错误,那么程序就会发生错误,即使 expr 为 True。例1:Rem 如果
2、A1单元格大于或等于60,则B1单元格显示“及格”,否则为“不及格”b1 = IIf(a1 = 60, 及格, 不及格)例2:Sub 根据月份判断季度() Dim Months As Byte 声明变量Star: 设置一个标签 弹出对话框让用户录入月份,默认为当前月份 Months = Application.InputBox(请输入月份,只能是数字, 月份, Month(Date), , , , , 1) 如果录入的数值小于1或者大于12则返回标签Star处继续执行 If Months 12 Then MsgBox 只能在1到12之间: GoTo Star 四个IIF嵌套运用,其中每个IIF
3、的第一参数使用双条件,在双条件时需要用And连接 MsgBox IIf(Months 1 And Months 3 And Months 6 _ And Months 9 And Months 10 Then A = A + 1 : B = B + A : C = C + B例2:声明工作簿打印事件Private Sub Workbook_BeforePrint(Cancel As Boolean)如果工作表名不等于“总表”就禁止打印 If ActiveSheet.Name 总表 Then MsgBox 禁止打印: Cancel = True 参数Cancel用于控制是否可以打印End Sub
4、例3:声明工作簿开启事件Private Sub Workbook_Open()如果现在的小时数大于等于8,而且小于等于18则退出过程 If Hour(Now) = 8 And Hour(Now) 0 Then ThisWorkbook.SaveAs C: & a1, FileFormat:=xlOpenXMLWorkbookMacroEnabledEnd Sub三、If.Then.Else 语句语法有两种格式,一种是语句在同一行中,其不需要End If作为结束语;另一种是多行,则End If必须要成结出现。If condition Then statementsElse elsestateme
5、nts或者,可以使用块形式的语法:If condition ThenstatementsElseIf condition-n Thenelseifstatements .ElseelsestatementsEnd If部分描述condition必要参数。一个或多个具有下面两种类型的表达式:数值表达式或字符串表达式,其运算结果为 True 或 False。如果 condition 为 Null,则 condition 会视为 False。TypeOf objectname Is objecttype 形式的表达式。其中的 objectname 是任何对象的引用,而 objecttype 则是任何
6、有效的对象类型。如果 objectname 是 objecttype 所指定的一种对象类型,则表达式为 True,否则为False。statements在块形式中是可选参数;但是在单行形式中,且没有 Else 子句时,则为必要参数。一条或多条以冒号分开的语句,它们在 condition 为 True 时执行。condition-n可选参数。与 condition 同。elseifstatements可选参数。一条或多条语句,它们在相关的 condition-n 为 True 时执行。elsestatements可选参数。一条或多条语句,它们在前面的 condition 或 condition-
7、n 都不为 True 时执行。注意 在单行形式中,按照 If.Then 判断的结果也可以执行多条语句。所有语句必须在同一行上并且以冒号分开,如下面语句所示:If A 10 Then A = A + 1 : B = B + A : C = C + B在块形式中,If 语句必须是第一行语句。其中的 Else、 ElseIf,和 End If 部分可以只在之前加上行号或行标签。If 块必须以一个 End If 语句结束。要决定某个语句是否为一个 If 块,可检查 Then 关键字之后是什么。如果在 Then 同一行之后,还有其它非注释的内容,则此语句就是单行形式的 If 语句。Else 和 Else
8、If 子句都是可选的。在 If 块中,可以放置任意多个 ElseIf 子句,但是都必须在 Else 子句之前。If 块也可以是嵌套的。当程序运行到一个 If 块(第二种语法)时,condition 将被测试。如果 condition为 True,则在 Then 之后的语句会被执行。如果 condition 为 False,则每个 ElseIf 部分的条件式(如果有的话)会依次计算并加以测试。如果找到某个为 True 的条件时,则其紧接在相关的 Then 之后的语句会被执行。如果没有一个 ElseIf 条件式为 True(或是根本就没有 ElseIf 子句),则程序会执行 Else 部分的语句。
9、而在执行完 Then 或 Else 之后的语句后,会从 End If 之后的语句继续执行。提示 根据单一表达式来执行多种可能的动作时,Select Case 更为有用。不过,TypeOf objectname Is objecttype 子句不能在 Select Case 语句中使用。注意 TypeOf 不能与诸如 Long、Integer 以及其他不是 Object 的固定数据类型一起使用。四、If.Then.Else 语句嵌套If condition ThenstatementsElseIf condition-n Thenelseifstatements ElseIf condition
10、-n Thenelseifstatements .(省略号代表可以添加更多的条件和更多的语句)ElseelsestatementsEnd If或If condition ThenIf condition-n Thenelseifstatements ElseelsestatementsEnd IfElseelsestatementsEnd If四、Select Case 语句根据表达式的值,来决定执行几组语句中的其中之一。语法:Select Case testexpressionCase expressionlist-nstatements-n .Case Elseelsestatements
11、End Select部分 描述testexpression必要参数。任何数值表达式或字符串表达式。expressionlist-n如果有 Case 出现,则为必要参数。其形式为 expression,expression To expression,Is comparisonoperator expression的一个或多个组成的分界列表。To 关键字可用来指定一个数值范围。如果使用 To 关键字,则较小的数值要出现在 To 之前。使用 Is 关键字时,则可以配合比较运算符(除 Is 和 Like 之外)来指定一个数值范围。如果没有提供,则 Is 关键字会被自动插入。statements-n可
12、选参数。一条或多条语句,当 testexpression 匹配expressionlist-n中的任何部分时执行。elsestatements可选参数。一条或多条语句,当 testexpression 不匹配 Case 子句的任何部分时执行。说明如果 testexpression 匹配某个 Case expressionlist 表达式, 则在 Case 子句之后,直到下一个 Case 子句的 statements 会被执行;如果是最后一个子句,则会执行到 End Select。然后控制权会转移到 End Select 之后的语句。如果 testexpression 匹配一个以上的 Case
13、子句中的 expressionlist 表达式,则只有第一个匹配后面的语句会被执行。Case Else 子句用于指明 elsestatements,当 testexpression 和所有的 Case 子句中的 expressionlist 都不匹配时,则会执行这些语句。虽然不是必要的,但是在 Select Case 区块中,最好还是加上 Case Else 语句来处理不可预见的 testexpression 值。如果没有 Case expressionlist 匹配 testexpression,而且也没有 Case Else 语句,则程序会从 End Select 之后的语句继续执行。可以
14、在每个 Case 子句中使用多重表达式或使用范围,例如,下面的语句是正确的:Case 1 To 4, 7 To 9, 11, 13, Is MaxNumber注意 Is 比较运算符和使用在 Select Case 语句中的 Is 关键字并不相同。也可以针对字符串指定范围和多重表达式。在下面的例子中,Case 所匹配的字符串为:等于 everything、按英文字母顺序落入从 nuts 到 soup 之间的字符串、以及 TestItem 所代表的当前值。Case everything, nuts To soup, TestItemSelect Case 语句也可以是嵌套的。但每个嵌套的 Sele
15、ct Case 语句必须要有相应的 End Select 语句。例:Function 成绩划分等级(rng As Range) Select Case rng Case Is 100 is关键词可以同行中使用两次,中间用逗号隔开,表示两个条件 成绩 = 输入错误 Case Is 7, Is = 24 Select Case Tim Case 7 To 11 msg = 上午 Case Is 12 msg = 上午 Case 12 msg = 中午 Case Is 13 msg = 下午 Case 13 To 17 msg = 下午 Case Is 18 msg = 下午 Case 18 To
16、23 msg = 晚上 Case Is 24 msg = 晚上 Case Is = 24 msg = 午夜 End Select Case Else msg = 凌晨 End Select MsgBox msgEnd SubIF与Select比较两者可以实现多条件判断,各有优势。IF的优势在于条件中可以随时使用and和or运算符设置条件。Select的优势在于速度快于IF。五、Choose 函数从参数列表中选择并返回一个值。语法Choose(index, choice-1, choice-2, . , choice-n) Choose 函数的语法具有以下几个部分:部分描述index必要参数,数
17、值表达式或字段,它的运算结果是一个数值,且界于 1 和可选择的项目数之间。choice必要参数,Variant 表达式,包含可选择项目的其中之一。说明Choose 会根据 index 的值来返回选择项列表中的某个值。如果 index 是 1,则 Choose 会返回列表中的第 1 个选择项。如果 index 是 2,则会返回列表中的第 2 个选择项,以此类推。可以使用 Choose 来查阅一个列表中的项目。例如,如果 index 所指定的值为 3,而 choice-1 = one、choice-2 = two、且 choice-3 = three,那么 Choose 将返回 three。当 i
18、ndex 代表一选项组中的值时,则这项功能将会特别有用。即使它只返回一个选项值,Choose 仍然会计算列表中的每个选择项。所以应该注意到这项副作用。例如,当在每个选择项表达式中使用了 MsgBox 函数作为其中的一部分时,每计算一个选择项,就会显示一次消息框。当 index小于 1 或大于列出的选择项数目时,Choose 函数返回 Null。如果 index 不是整数,则会先四舍五入为与其最接近的整数。例:Sub 设置单元格颜色1() Choose法 Dim 颜色 As Byte 颜色 = Application.InputBox(请选择颜色: & Chr(10) & 1:红色 & 2:蓝色
19、 & Chr(10) & _ 3:灰色 & 4:棕色 & Chr(10) & 5:绿色, 指定颜色, 1, , , , , 1) Range(A1).Interior.ColorIndex = Choose(颜色, 7, 5, 15, 40, 4)End SubSub 设置单元格颜色2() IIF法 Dim 颜色 As Byte 颜色 = Application.InputBox(请选择颜色: & Chr(10) & 1:红色 & 2:蓝色 & Chr(10) & _ 3:灰色 & 4:棕色 & Chr(10) & 5:绿色, 指定颜色, 1, , , , , 1) Range(A1).Int
20、erior.ColorIndex = IIf(颜色 = 1, 7, IIf(颜色 = 2, 5, IIf(颜色 = 3, 15, IIf(颜色 = 4, 40, IIf(颜色 = 5, 4, xlNone)End SubSub 设置单元格颜色3() IF.Then.Else法 Dim 颜色 As Byte 颜色 = Application.InputBox(请选择颜色: & Chr(10) & 1:红色 & 2:蓝色 & Chr(10) & _ 3:灰色 & 4:棕色 & Chr(10) & 5:绿色, 指定颜色, 1, , , , , 1) If 颜色 = 1 Then Range(A1).
21、Interior.ColorIndex = 7 ElseIf 颜色 = 2 Then Range(A1).Interior.ColorIndex = 5 ElseIf 颜色 = 3 Then Range(A1).Interior.ColorIndex = 15 ElseIf 颜色 = 4 Then Range(A1).Interior.ColorIndex = 40 ElseIf 颜色 = 5 Then Range(A1).Interior.ColorIndex = 4 End IfEnd SubSub 设置单元格颜色4() Select Case法 Dim 颜色 As Byte 颜色 = A
22、pplication.InputBox(请选择颜色: & Chr(10) & 1:红色 & 2:蓝色 & Chr(10) & _ 3:灰色 & 4:棕色 & Chr(10) & 5:绿色, 指定颜色, 1, , , , , 1) Select Case 颜色 Case 1 Range(A1).Interior.ColorIndex = 7 Case 2 Range(A1).Interior.ColorIndex = 5 Case 3 Range(A1).Interior.ColorIndex = 15 Case 4 Range(A1).Interior.ColorIndex = 40 Case 5 Range(A1).Interior.ColorIndex = 4 End SelectEnd Sub
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1