十七 变量默认值 简写变量 常量
1声明变量的同时赋值:
数值:0 字符串:"“空字符串 布尔:False 变体:Empty(空)
2 布尔值:false(0) True(1)
所有非0的数字转换成布尔类型都是True
3变量定义简写
dim i % integer整型
dim j& long长整型
#double 小数
$ string 字符串
常数后面加符号,改变常数数据类型
Date Boolean 没有简写
'VBA 声明变量 同时根据变量的数据类型,系统会自动给变量赋初值。
'1、如果声明的变量是数值类型的:整数类型 0 小数类型 0.0
'2. 字符串类型:”" 空字符串
'3. 布尔类型 False
'4. 变体类型 Empty – 空的意思
'布尔类型转成数字没有意义的: False —>0 True —>-1
'所有的非0 的数字都可以转成布尔类型的True 非空的字符串
'VBA 的变量声明的简写方式
'dim 变量名 as 数据类型
'Dim 变量名简写符号
Sub 变量声明的简写()
Dim i% '==== dim i as integer
Dim j& '==== dim j as long
Dim d# '===== dim d as double
Dim s$ '===== dim s as string
Dim b As Boolean '没有简写符号
Dim date1 As Date
'把常数后面跟上简写符号,改变了常数数据类型
MsgBox 64 * 64 * 64&
End Sub
'常量:一些表述公理定理常数的量,不变的量。
'特点:一经声明同时进行赋值,然后就不可以在程序中再被赋值改变。
'常量的声明 Const
Sub 求圆面积()
'3.14115926536
Dim r As Double
Const Pi As Double = 3.14115926536
r = 2.1
MsgBox Pi * r ^ 2
End Sub
4 常量声明:一经赋值在程序中不可改变,声明同时赋值
Const Pi as double=3.1415926
十八 判断是否闰年
规则:
1 被4整除,又不能被100整除
2 400的倍数是闰年
3以上两点满足其一
条件:(year mod 4 =0 and year mod <>0) or (year mod 400 =0)
Sub 判断闰年()
Dim inputYear&, b1 As Boolean
inputYear = InputBox("请输入一个年份")
'inputyear mod 4 = 0
'inputyear mod 100 <> 0
'1*1
b1 = (inputYear Mod 4 = 0 And inputYear Mod 100 <> 0) Or (inputYear Mod 400 = 0)
MsgBox IIf(b1, inputYear & "年,是闰年", inputYear & "年, 是平年")
'iif 内置函数就完成了一个是否判断 与工作表函数中的if 函数非常类似
End Sub
十九 分支结构
1 三目运算符 vba 没有,有iif函数
iif(布尔值,真语句,假语句)
2 单分支结构
第一种:
if 条件 then 语句
第二种:
if 条件 then
语句
end if
'基本的if 语句的语法:
'if 条件 then 处理语句 '仅限于单分支
'if 条件 Then '后面不跟着处理语句 'if 的结构
'xxxx 处理语句
'yyyy
'zzzz
'End if
Sub 码农买瓜()
Dim 卖瓜的 As Boolean
MsgBox "码农买了一斤包子做晚餐"
卖瓜的 = False
If 卖瓜的 Then
MsgBox "码农买了一个西瓜"
End If
MsgBox "码农回家了"
End Sub
二十 双分支,多分支结构
1 双分支:
if 条件 then
成立时语句
else
不成立时语句
end if
'双分支结构(是否结构)
Sub 小明买鸡蛋()
Dim 坏蛋 As Long
坏蛋 = InputBox("请输入小明的坏鸡蛋数")
If 坏蛋 <= 5 Then '是的分支
MsgBox "小明做了一盘炒鸡蛋,给吃了。"
Else '否的分支
MsgBox "小明拎着鸡蛋找卖鸡蛋的干仗去了。"
End If
End Sub
2 多分支:
if 条件1 then
语句1
elseif 条件2 then
语句2
elseif 条件n then
语句n
else
语句m
end if
'多分支练习题
Sub 学生成绩的统计()
Dim score As Long
score = InputBox("请输入学生成绩")
If score >= 90 Then
MsgBox "该生是优秀学生"
ElseIf score >= 80 Then '否则如果
MsgBox "该生是良好学生"
ElseIf score >= 60 Then
MsgBox "该生是合格学生"
Else
MsgBox "该生是不及格学生"
End If
End Sub
二十一 if 语句嵌套
1语法
if 条件1 then
if 条件2 then
语句…
end if
else
语句…
end if
'所谓if 语句嵌套,就是在if 的某一个分支里嵌入一个完整的if 语句
'模拟登录的程序
'要求:必须用户名="小明" 如果不是就输出"用户名非法" 结束
'如果是"小明" 要求输入密码,如果密码="888888" 就输出登录成功,否则就输出密码错误
'VBE 的单步调试功能
'黄色箭头指向的是即将执行的语句
Sub 模拟登录()
Dim userName As String, password As String
userName = InputBox("请输入用户名")
If userName = "小明" Then
password = InputBox("请输入登录密码")
If password = "888888" Then
MsgBox "欢迎登录本系统"
Else
MsgBox "密码错误,登录失败"
End If
Else
MsgBox "用户名输入非法"
End If
End Sub
2 单步调试:F8
'三数求最大:输入a,b,c 3个数要求得到最大值
' 假如 a>b -> a 和c 比 a>c ->a 最大
' a>b-> a<c -> c 最大
Sub 三数求最大()
Dim a&, b&, c&
a = InputBox("请输入第一个数字")
b = InputBox("请输入第二数字")
c = InputBox("请输入第三个数字")
If a >= b Then
If a >= c Then
MsgBox "a 是最大值, a=" & a
Else
MsgBox "c 是最大值, c=" & c
End If
Else
If b >= c Then
MsgBox "b 是最大值, b=" & b
Else
MsgBox "c 是最大值, c=" & c
End If
End If
End Sub
二十二、二十三
练习
猜数游戏 三天打渔两天晒网 学生成绩
二十四 多分支语句
语法:
select case 值|表达式
case 分支1
语句1
case 分支2
语句2
case 分支n
语句n
end select
'Select Case 多分支结构语句
'学生评定:
'输入一个成绩 90及以上优秀80-89良好,60-79 合格,其他不及格
'Select Case 值 或者 表达式
'Case 值 比较 不能跟逻辑运算符
Sub 学生评定()
Dim score As Long
score = InputBox("请输入学生成绩")
Select Case score
Case Is >= 90
MsgBox "优秀生"
Case Is >= 80
MsgBox "良好生"
Case Is >= 60
MsgBox "合格生"
Case Else
MsgBox "不及格"
End Select
End Sub
'3,4,5 是春天,6,7,8 是夏天,9,10 是秋天,11,12,1,2 是冬天
Sub 输入月份返回季节()
Dim inputM As Long
inputM = Val(InputBox("请输入月份1-12"))
Select Case inputM
Case 3, 4, 5
MsgBox "是春季"
Case 6, 7, 8
MsgBox "是夏季"
Case 9, 10
MsgBox "是秋季"
Case 11, 12, 1, 2
MsgBox "大约在冬季"
Case Else
MsgBox "月份输入非法"
End Select
End Sub
二十五 作业
Sub 猜数游戏雏形()
Dim num As Long, guess As Long
num = WorksheetFunction.RandBetween(1, 3)
guess = InputBox("请输入一个1-3之间的整数:")
If num = guess Then
MsgBox "猜对了"
ElseIf guess < num Then
MsgBox "你猜小了"
Else
MsgBox "你猜大了"
End If
End Sub
Sub 三天打渔两天晒网()
Dim days As Long, mod5 As Long
MsgBox Date
days = Date - #1/1/1990# + 1
mod5 = days Mod 5
MsgBox mod5
If mod5 >= 1 And mod5 <= 3 Then
MsgBox "今天打渔"
Else
MsgBox "今天晒网"
End If
End Sub
'Select Case 多分支作业,李四的工资
Sub 李四的工资()
Dim basicWage As Long, pingding As String
basicWage = 5000
pingding = UCase(InputBox("请输入李四的年终评定")) '必须是大写的A-E,uCase 函数
Select Case pingding
Case "A"
basicWage = basicWage + 800
Case "B"
basicWage = basicWage + 500
Case "C"
Case "D"
basicWage = basicWage - 200
Case "E"
basicWage = basicWage - 500
Case Else
MsgBox "你的评定输入有误。"
End Select
MsgBox "根据年终评定,李四来年的年薪为" & basicWage * 13
End Sub