Excel VBA
实例比较ExcelVBA的四种选择结构和函数
2017-08-14 16:40:49

程序代码的强大之处在于能够利用电脑运算速度快的特点,通过跳转实现选择和循环的控制结构,从而让程序具有智能、且能按预定的条件让电脑能不知疲倦地工作。

在程序中要经常进行各种选择或判断,且通过条件判断后根据不同的情况选择执行不同的代码块。

VBA有四种语句可以实现条件选择或判断的功能:if、select结构、iif和choose函数;各有其优势及应用的特定场合,而if结构则是可以完全实现或替代另外其它三种结构或函数的。

1 单条件判断之If与Select Case

Sub IF_Then语句()

'如果A1的值在36到37.5之间

If Range("a1").Value >= 36 And Range("a1").Value <= 17.5 Then

MsgBox "正常" '提示正常

Else '否则

MsgBox "异常" '提示异常

End If

End Sub

Sub Select_Case语句()

Select Case Range("a1").Value '以A1的值作为判断条件

Case Is < 36, Is > 37.5 '如果小于36,或者大于37.5

MsgBox "异常" '提示异常

Case Else '否则

MsgBox "正常" '提示正常

End Select

End Sub

2 多条件判断之If与Select Case

Sub 多条件之IF_Then()

If Sheet2.Range("a1").Value < 60 Then '如果Sheet2工作表的A1单元格小于60

Sheet2.Range("b1").Value = "不及格" '那么在B1显示不及格

ElseIf Sheet2.Range("a1").Value < 80 Then '如果Sheet2工作表的A1单元格小于80

Sheet2.Range("b1").Value = "及格" '那么在B1显示及格

ElseIf Sheet2.Range("a1").Value < 90 Then '如果Sheet2工作表的A1单元格小于90

Sheet2.Range("b1").Value = "良" '那么在B1显示良

ElseIf Sheet2.Range("a1").Value < 100 Then '如果Sheet2工作表的A1单元格小100

Sheet2.Range("b1").Value = "优" '那么在B1显示优

ElseIf Sheet2.Range("a1").Value = 100 Then '如果Sheet2工作表的A1单元格小1060

Sheet2.Range("b1").Value = "满分" '那么在B1显示满分

End If

End Sub

Sub 多条件之Select_Case()

Select Case Sheet2.Range("a1").Value '以Sheet2工作表的A1单元格作为判断条件

Case Is < 60 '如果小于60

Sheet2.Range("b1").Value = "不及格" '以Sheet2工作表的A1单元格作为判断条件

Case Is < 80 '如果小于80

Sheet2.Range("b1").Value = "及格" '以Sheet2工作表的A1单元格作为判断条件

Case Is < 90 '如果小于90

Sheet2.Range("b1").Value = "良" '以Sheet2工作表的A1单元格作为判断条件

Case Is < 100 '如果小于100

Sheet2.Range("b1").Value = "优" '以Sheet2工作表的A1单元格作为判断条件

Case 100 '如果等于100

Sheet2.Range("b1").Value = "满分" '以Sheet2工作表的A1单元格作为判断条件

End Select

End Sub

在许多情况下,如果仅需要检验与单个自变量有关的可能范围,对于这种情况的判断选择,使用Select Case能更加简化条件表达式,让代码显得更直观和简洁。

3 IIF函数

Sub Excel版本号()

Dim Ver As String '声明变量,用于表示版本号

'获取Excel的版本号,并将它赋值给变量。Excel的开发代号采用11.0、12.0这种编号方式,所以再用IIF函数转换成Excel 2003这种形式的版本号

Ver = Application.Version

'通过IIF函数转换开发代号为符合大众阅读习惯的版本号

MsgBox IIf(Ver = "11.0", "Excel 2003", IIf(Ver = "12.0", "Excel 2007", IIf(Ver = "14.0", "Excel 2010", IIf(Ver = "15.0", "Excel 2013", "您的OFFICE版本比较古老"))))

End Sub

'代码思路分析:

'Application.Version代表Excel的版本号,通常是11.0、12.0、14.0等等编码方式

'11.0对应Excel 2003,12.0对应用Excel 2007,14.0对应Excel 2010,15.0对应Excel 2013

'当取出Excel的版本后,IIF函数可以根据该值返回对应的Excel的年号版本

4 Choose 函数

Sub 打开搜索引擎()

'设置一个标签

Star:

'弹出一个输入框,并将用户输入的值赋值给变量Url

URL = Application.InputBox("输入1:百度" + Chr(10) + "输入2:谷歌" + Chr(10) + "输入3:搜狗" + Chr(10) + "输入4:必应", "打开搜索引擎", 2, , , , , 1)

'如果变量的值小于1或者大于4

If URL < 1 Or URL > 4 Then

MsgBox "允许范围是1到4" '提示用户超出允许范围,

GoTo Star '然后跳转到标签处继续执行(只要输入非法值就继续执行,直到符合要求为止)

Else '否则

'调用explorer.exe对象,打开指定网站。要注意网址是explorer.exe的参数,所以它们之间有一个空格

Shell "explorer.exe " & Choose(URL, "http://www.xxx.com/", "http://www.xxx2.com.hk/", "http://www.xxx3.com/", "http://cn.xx.com/"), vbMaximizedFocus

End If

End Sub

'代码思路分析:

'首先设置一个标签,当用户录入数值错误时可以返回此标签处继续执行,

'当然要实现同样的功能也可以改用循环语句。当学会了下一节的循环语句后,读者可以练习一下改用循环语句实现同等功能。

'然后通过Application.InputBox方法创建一个输入框,让用户输入数值,从而根据数值决定打开哪一个网址。

'接着要判断用户录入的数值是否属于1、2、3、4几个值中的一个,如果不是那么返回标签处继续执行,等待用户重新录入数值。