条件判断语句.docx

上传人:b****7 文档编号:26600269 上传时间:2023-06-20 格式:DOCX 页数:13 大小:20.21KB
下载 相关 举报
条件判断语句.docx_第1页
第1页 / 共13页
条件判断语句.docx_第2页
第2页 / 共13页
条件判断语句.docx_第3页
第3页 / 共13页
条件判断语句.docx_第4页
第4页 / 共13页
条件判断语句.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

条件判断语句.docx

《条件判断语句.docx》由会员分享,可在线阅读,更多相关《条件判断语句.docx(13页珍藏版)》请在冰豆网上搜索。

条件判断语句.docx

条件判断语句

条件判断语句

一、IIf函数(三个参数都为必选参数,这有别于IF函数)

语法:

IIf(expr,truepart,falsepart)

部分

描述

expr

必要参数。

用来判断真伪的表达式。

truepart

必要参数。

如果expr为True,则返回这部分的值或表达式。

falsepart

必要参数。

如果expr为False,则返回这部分的值或表达式。

说明

由于IIf会计算truepart和falsepart,虽然它只返回其中的一个。

因此要注意到这个副作用。

例如,如果falsepart产生一个被零除错误,那么程序就会发生错误,即使expr为True。

例1:

Rem如果A1单元格大于或等于60,则B1单元格显示“及格”,否则为“不及格”

[b1]=IIf([a1]>=60,"及格","不及格")

例2:

Sub根据月份判断季度()

DimMonthsAsByte'声明变量

Star:

'设置一个标签

'弹出对话框让用户录入月份,默认为当前月份

Months=Application.InputBox("请输入月份,只能是数字","月份",Month(Date),,,,,1)

'如果录入的数值小于1或者大于12则返回标签Star处继续执行

IfMonths<1OrMonths>12ThenMsgBox"只能在1到12之间":

GoToStar

'四个IIF嵌套运用,其中每个IIF的第一参数使用双条件,在双条件时需要用And连接

MsgBoxIIf(Months>1AndMonths<4,"一季度",IIf(Months>3AndMonths<7,"二季度",IIf(Months>6_

AndMonths<10,"三季度",IIf(Months>9AndMonths<1,"四季度","录入错误"))))

EndSub

二、单行形式If...Then

在单行形式中,按照If...Then判断的结果也可以执行多条语句。

所有语句必须在同一行上并且以冒号分开,如下面语句所示:

例1:

IfA>10ThenA=A+1:

B=B+A:

C=C+B

例2:

'声明工作簿打印事件

PrivateSubWorkbook_BeforePrint(CancelAsBoolean)

'如果工作表名不等于“总表”就禁止打印

IfActiveSheet.Name<>"总表"ThenMsgBox"禁止打印":

Cancel=True’参数Cancel用于控制是否可以打印

EndSub

例3:

'声明工作簿开启事件

PrivateSubWorkbook_Open()

'如果现在的小时数大于等于8,而且小于等于18则退出过程

IfHour(Now)>=8AndHour(Now)<=18ThenExitSub

'退出Excel程序

Application.Quit

EndSub

例4:

Sub工作簿另存()

'如果A1是数字,而且非空,那么工作簿保存为A1的值

'IsNumeric判断单元格值是否为数值

'SaveAs另存为

'FileFormat文件类型

'xlOpenXMLWorkbookMacroEnabled启动宏的工作簿

IfVBA.IsNumeric([a1])AndLen([a1])>0ThenThisWorkbook.SaveAs"C:

\"&[a1],FileFormat:

=xlOpenXMLWorkbookMacroEnabled

EndSub

三、If...Then...Else语句

语法有两种格式,一种是语句在同一行中,其不需要EndIf作为结束语;另一种是多行,则EndIf必须要成结出现。

IfconditionThen[statements][Elseelsestatements]

或者,可以使用块形式的语法:

IfconditionThen

[statements]

[ElseIfcondition-nThen

[elseifstatements]...

[Else

[elsestatements]]

EndIf

部分

描述

condition

必要参数。

一个或多个具有下面两种类型的表达式:

 

数值表达式或字符串表达式,其运算结果为True或False。

如果condition为Null,则condition会视为False。

TypeOfobjectnameIsobjecttype形式的表达式。

其中的objectname是任何对象的引用,而objecttype则是任何有效的对象类型。

如果objectname是objecttype所指定的一种对象类型,则表达式为True,否则为False。

statements

在块形式中是可选参数;但是在单行形式中,且没有Else子句时,则为必要参数。

一条或多条以冒号分开的语句,它们在condition为True时执行。

condition-n

可选参数。

与condition同。

elseifstatements

可选参数。

一条或多条语句,它们在相关的condition-n为True时执行。

elsestatements

可选参数。

一条或多条语句,它们在前面的condition或condition-n都不为True时执行。

注意在单行形式中,按照If...Then判断的结果也可以执行多条语句。

所有语句必须在同一行上并且以冒号分开,如下面语句所示:

IfA>10ThenA=A+1:

B=B+A:

C=C+B

在块形式中,If语句必须是第一行语句。

其中的Else、ElseIf,和EndIf部分可以只在之前加上行号或行标签。

If块必须以一个EndIf语句结束。

要决定某个语句是否为一个If块,可检查Then关键字之后是什么。

如果在Then同一行之后,还有其它非注释的内容,则此语句就是单行形式的If语句。

Else和ElseIf子句都是可选的。

在If块中,可以放置任意多个ElseIf子句,但是都必须在Else子句之前。

If块也可以是嵌套的。

当程序运行到一个If块(第二种语法)时,condition将被测试。

如果condition为True,则在Then之后的语句会被执行。

如果condition为False,则每个ElseIf部分的条件式(如果有的话)会依次计算并加以测试。

如果找到某个为True的条件时,则其紧接在相关的Then之后的语句会被执行。

如果没有一个ElseIf条件式为True(或是根本就没有ElseIf子句),则程序会执行Else部分的语句。

而在执行完Then或Else之后的语句后,会从EndIf之后的语句继续执行。

提示根据单一表达式来执行多种可能的动作时,SelectCase更为有用。

不过,TypeOfobjectnameIsobjecttype子句不能在SelectCase语句中使用。

注意TypeOf不能与诸如Long、Integer以及其他不是Object的固定数据类型一起使用。

四、If...Then...Else语句嵌套

IfconditionThen

[statements]

[ElseIfcondition-nThen

[elseifstatements]

[ElseIfcondition-nThen

[elseifstatements]...(省略号代表可以添加更多的条件和更多的语句)

[Else

[elsestatements]]

EndIf

IfconditionThen

Ifcondition-nThen

[elseifstatements]

Else

[elsestatements]

EndIf

Else

[elsestatements]

EndIf

四、SelectCase语句

根据表达式的值,来决定执行几组语句中的其中之一。

语法:

SelectCasetestexpression

[Caseexpressionlist-n

[statements-n]]...

[CaseElse

[elsestatements]]

EndSelect

部分

描述

testexpression

必要参数。

任何数值表达式或字符串表达式。

expressionlist-n

如果有Case出现,则为必要参数。

其形式为expression,expressionToexpression,Iscomparisonoperatorexpression的一个或多个组成的分界列表。

To关键字可用来指定一个数值范围。

如果使用To关键字,则较小的数值要出现在To之前。

使用Is关键字时,则可以配合比较运算符(除Is和Like之外)来指定一个数值范围。

如果没有提供,则Is关键字会被自动插入。

statements-n

可选参数。

一条或多条语句,当testexpression匹配expressionlist-n中的任何部分时执行。

elsestatements

可选参数。

一条或多条语句,当testexpression不匹配Case子句的任何部分时执行。

说明

如果testexpression匹配某个Caseexpressionlist表达式,则在Case子句之后,直到下一个Case子句的statements会被执行;如果是最后一个子句,则会执行到EndSelect。

然后控制权会转移到EndSelect之后的语句。

如果testexpression匹配一个以上的Case子句中的expressionlist表达式,则只有第一个匹配后面的语句会被执行。

CaseElse子句用于指明elsestatements,当testexpression和所有的Case子句中的expressionlist都不匹配时,则会执行这些语句。

虽然不是必要的,但是在SelectCase区块中,最好还是加上CaseElse语句来处理不可预见的testexpression值。

如果没有Caseexpressionlist匹配testexpression,而且也没有CaseElse语句,则程序会从EndSelect之后的语句继续执行。

可以在每个Case子句中使用多重表达式或使用范围,例如,下面的语句是正确的:

Case1To4,7To9,11,13,Is>MaxNumber

注意Is比较运算符和使用在SelectCase语句中的Is关键字并不相同。

也可以针对字符串指定范围和多重表达式。

在下面的例子中,Case所匹配的字符串为:

等于everything、按英文字母顺序落入从nuts到soup之间的字符串、以及TestItem所代表的当前值。

Case"everything","nuts"To"soup",TestItem

SelectCase语句也可以是嵌套的。

但每个嵌套的SelectCase语句必须要有相应的EndSelect语句。

例:

Function成绩划分等级(rngAsRange)

SelectCaserng

CaseIs<0,Is>100'is关键词可以同行中使用两次,中间用逗号隔开,表示两个条件

成绩="输入错误"

CaseIs<60

成绩="不及格"

Case60

成绩="及格"

Case60To80

成绩="良"

Case81To99

成绩="优"

CaseElse'如果不符合前面的条件,则执行本语句

成绩="满分"

EndSelect

EndFunction

嵌套例:

Sub嵌套case()

DimTimAsByte,msgAsString

Tim=Hour(Now)

SelectCaseTim

CaseIs>7,Is<=24

SelectCaseTim

Case7To11

msg="上午"

CaseIs<12

msg="上午"

Case12

msg="中午"

CaseIs<13

msg="下午"

Case13To17

msg="下午"

CaseIs<18

msg="下午"

Case18To23

msg="晚上"

CaseIs<24

msg="晚上"

CaseIs=24

msg="午夜"

EndSelect

CaseElse

msg="凌晨"

EndSelect

MsgBoxmsg

EndSub

IF与Select比较

两者可以实现多条件判断,各有优势。

IF的优势在于条件中可以随时使用and和or运算符设置条件。

Select的优势在于速度快于IF。

五、Choose函数

从参数列表中选择并返回一个值。

语法

Choose(index,choice-1[,choice-2,...[,choice-n]])

Choose函数的语法具有以下几个部分:

部分

描述

index

必要参数,数值表达式或字段,它的运算结果是一个数值,且界于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"。

当index代表一选项组中的值时,则这项功能将会特别有用。

即使它只返回一个选项值,Choose仍然会计算列表中的每个选择项。

所以应该注意到这项副作用。

例如,当在每个选择项表达式中使用了MsgBox函数作为其中的一部分时,每计算一个选择项,就会显示一次消息框。

当index小于1或大于列出的选择项数目时,Choose函数返回Null。

如果index不是整数,则会先四舍五入为与其最接近的整数。

例:

Sub设置单元格颜色1()'Choose法

Dim颜色AsByte

颜色=Application.InputBox("请选择颜色:

"&Chr(10)&"1:

红色"&"2:

蓝色"&Chr(10)&_

"3:

灰色"&"4:

棕色"&Chr(10)&"5:

绿色","指定颜色",1,,,,,1)

Range("A1").Interior.ColorIndex=Choose(颜色,7,5,15,40,4)

EndSub

Sub设置单元格颜色2()'IIF法

Dim颜色AsByte

颜色=Application.InputBox("请选择颜色:

"&Chr(10)&"1:

红色"&"2:

蓝色"&Chr(10)&_

"3:

灰色"&"4:

棕色"&Chr(10)&"5:

绿色","指定颜色",1,,,,,1)

Range("A1").Interior.ColorIndex=IIf(颜色=1,7,IIf(颜色=2,5,IIf(颜色=3,15,IIf(颜色=4,40,IIf(颜色=5,4,xlNone)))))

EndSub

Sub设置单元格颜色3()'IF...Then...Else法

Dim颜色AsByte

颜色=Application.InputBox("请选择颜色:

"&Chr(10)&"1:

红色"&"2:

蓝色"&Chr(10)&_

"3:

灰色"&"4:

棕色"&Chr(10)&"5:

绿色","指定颜色",1,,,,,1)

If颜色=1Then

Range("A1").Interior.ColorIndex=7

ElseIf颜色=2Then

Range("A1").Interior.ColorIndex=5

ElseIf颜色=3Then

Range("A1").Interior.ColorIndex=15

ElseIf颜色=4Then

Range("A1").Interior.ColorIndex=40

ElseIf颜色=5Then

Range("A1").Interior.ColorIndex=4

EndIf

EndSub

Sub设置单元格颜色4()'SelectCase法

Dim颜色AsByte

颜色=Application.InputBox("请选择颜色:

"&Chr(10)&"1:

红色"&"2:

蓝色"&Chr(10)&_

"3:

灰色"&"4:

棕色"&Chr(10)&"5:

绿色","指定颜色",1,,,,,1)

SelectCase颜色

Case1

Range("A1").Interior.ColorIndex=7

Case2

Range("A1").Interior.ColorIndex=5

Case3

Range("A1").Interior.ColorIndex=15

Case4

Range("A1").Interior.ColorIndex=40

Case5

Range("A1").Interior.ColorIndex=4

EndSelect

EndSub

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1