VBA是一种编程语言,它依托于Office软件,不能独立运行,通过VBA可以实现各种Office软件操作的自动化。通俗易懂的来说就是在Excel中想实现什么功能,就可以通过VBA语言编写的程序区实现。
(2)复制第一行工资条列头至第四行
(3)选中第三行-右键-设置单元格格式-边框-取消左右竖线
(4)将鼠标选中A4单元格-停止录制-取消使用相对引用
3. 执行
选中A1单元格-制作工资条
指定-制作工资条
这样,点击按钮就会执行宏
但是这样还是点击一次,生成一行,如果想一键生成怎么办
点击Visual Basic
添加循环
Sub 代码名称()
代码内容
End Sub
所谓变量就是内存开辟出来的用于存储数据的存储单元
方法1:dim 变量名 as 数据类型
方法2:dim 变量名 as 数据类型,变量名 as 数据类型
方法3:dim 变量名,变量名 as 数据类型 ()
方法4:dim 变量名+数据类型符
Sub 变量测试()
Dim i As Integer
Dim i1 As Integer, str As String
Dim i2, i3 As Integer
Dim i4%
End Sub
注意
数据类型 | 类型关键字 | 类型符 | 前缀 | 存储空间 | 取值范围 |
---|---|---|---|---|---|
字节型 | Byte | 无 | Byt | 1字节 | |
整型 | Integer | % | Int | 2字节 | -32768~32767 |
长整型 | Long | & | Lng | 4字节 | -2147483648~2147483647 |
单精度型 | Single | ! | Sng | 4字节 | 负数-3.402823E38~-1.401298E-45正数1.401298E-45~3.402823E38 |
双精度型 | Double | # | Dbl | 8字节 | 负数-1.79769313486232E308~-4.9406545841247E-324正数4.9406545841247E-324~1.79769313486232E308 |
货币型 | Currency | @ | Cur | 8字节 | -922337203685477.5808~922337203685477.5808 |
字符串型 | String | $ | Str | 暂不定 | 定长字符串可包含0个字符~216个字符,变长字符串可包含0个字符~331个字符 |
布尔型 | Boolean | 无 | Bln | 2字节 | True或False |
日期型 | Date | 无 | Dtm | 8字节 | 100年1月1日~9999年12月31日 |
所谓常量就是程序运行过程中值不可以改变的量,简单说常量就是程序中的具体数值
注意事项如下
#2009-08-11 10:25:00 PM#
#03/23/2019#
#03-25-2008 20:30:00#
3)布尔型数据(Boolean):
算术运算符>连接运算符>关系运算符>逻辑运算符
Sub Text()
Dim i%
Dim bool As Boolean
bool = True
MsgBox bool + 1, vbOKCancel, "bool+1的值"
' 显示的内容,显示的按钮,标题
End Sub
Sub Text()
Dim i%
Dim bool As Boolean
bool = True
'MsgBox bool + 1, vbOKCancel, "bool+1的值"
' 显示的内容,显示的按钮,标题
i = 2 + 9
MsgBox (i)
End Sub
如果MsgBox里只填显示的内容,标题时默认的,按钮时默认的只显示“确定”
顺序结构就是指程序自上而下执行,不经任何跳转
程序在执行前会判断条件是否成立,如果条件成立则执行某个语句段,如果条件不成立,可以执行其它的语句段
包含两大语句if、select
(一) if语句
Sub test1()
Dim i%
i = 5
If i > 0 Then
MsgBox ("i是正数")
End If
End Sub
Sub test1()
Dim i%
i = -5
If i > 0 Then
MsgBox ("i是正数")
Else
MsgBox ("i是负数")
End If
End Sub
Sub test1()
Dim i%
i = 50
If i > 90 Then
MsgBox ("A")
ElseIf i > 70 Then
MsgBox ("B")
ElseIf i > 60 Then
MsgBox ("C")
Else
MsgBox ("D")
End If
End Sub
Sub test1()
Dim i%
i = 1
Select Case i
Case 1 To 5
MsgBox ("weekday")
Case 6, 7
MsgBox ("weekend")
Case Else
MsgBox ("error!!!!!")
End Select
End Sub
Case语句是依次测试的,并执行第一个符合Case条件的相关的程序代码,即使再有其它符合条件的分支也不会再执行。如果没有找到复合条件的,并且有Case Else语句,就会执行该语句后面的程序代码。
1.打印1-10到a1-a10单元格
Sub text()
Dim i%
For i = 1 To 10
Sheets("sheet2").Range("a" & i).Value = i
Next i
End Sub
2.打印1-10间的偶数
Sub text()
Dim i%
For i = 1 To 10
if (i mod 2)=0 then
Sheets("sheet2").Range("b" & i/2).Value = i
end if
Next i
End Sub
3.打印1-100间能被3和7同时整除的数
Sub text()
Dim i%
For i = 1 To 100
if (i mod 3)=0 and (i mod 7)=0 then
msgbox(i)
end if
Next i
End Sub
4.打印1-10的和
Sub text()
Dim i%
Dim s%
s = 0
For i = 1 To 10
s = s + i
Next i
msgbox(s)
End Sub
5.打印1-10间偶数的和
Sub 打印1-10间偶数的和()
Dim i%
Dim s%
s = 0
For i = 1 To 10
If (i Mod 2) = 0 Then
s = s + i
End If
Next i
MsgBox (s)
End Sub
6.打印5! = 5*4*3*2*1
Sub text()
Dim i%
Dim s%
s = 1
For i = 1 To 5
s = s * i
Next i
MsgBox (s)
End Sub
7.计算1-10间偶数的个数
Sub text()
Dim i%
Dim c%
c = 0
For i = 1 To 10
If (i Mod 2) = 0 Then
c = c + 1
End If
Next i
MsgBox (c)
End Sub
8.2-99之间能整除3的数字之和
Sub text()
Dim i%
Dim a%
a = 0
For i = 2 To 99
If (i Mod 3) = 0 Then
a = a + i
End If
Next i
MsgBox (a)
End Sub
9.求1-10偶数的平均分
Sub text()
Dim i%
Dim c%
c = 0
s = 0
For i = 1 To 10
If (i Mod 2) = 0 Then
s = s + i
c = c + 1
End If
Next i
MsgBox (s / c)
End Sub
10.计算1*1 + 2*2 + 3*3 +4*4 + 5*5 +...+ 10*10的和
Sub text()
Dim i%
Dim j%
Dim s%
s = 0
For i = 1 To 10
j = i
s = s + i * j
Next i
MsgBox (s)
End Sub
11.实现九九乘法表
sub text()
For a = 1 To 9
For b = 1 To 9
If a >= b Then
Sheets("Sheet2").Cells(a, b).Value = (a & "*" & b & "=" & a * b)
End If
Next b
Next a
End Sub
数组就是用来存储大量的数据的存储空间,数组在存储数据时是有序存储。数组中的每一个值被称为数组元素,每一个数组元素都有一个编号(即索引,也可以称为下标),从0开始到数组长度-1为止
Sub text()
'数组定义的第一种方法
'dim 数组名(数组长度) as 数据类型
'数组内的元素的数据类型必须相同
'Dim arr(3) As Integer
'Dim i%
'arr(0) = 1
'arr(1) = 2
'arr(2) = 3
'For i = 0 To 2
' MsgBox (arr(i))
'Next i
'第二种定义方式
Dim i%
arr = Array(1, 2, 3)
'修改数组元素
arr(0) = 5
For i = 0 To 2
MsgBox (arr(i))
Next i
End Sub
Sub text()
Dim arr(10) As Integer
Dim i%
'为数组赋值,将A1-A10单元格种的值赋给数组
For i = 0 To 9
arr(i) = Cells(i + 1, 1)
Next i
'利用循环输出数组里面的值
'遍历数组
For i = 0 To 9
MsgBox (arr(i))
Next i
End Sub
Sub text()
Dim i%
arr = Array(1, 2, 4, 5, 8)
For i = LBound(arr) To UBound(arr)
MsgBox (arr(i))
Next i
End Sub
定义格式:Dim 数组名(行数,列数) as 数据类型
格式:数组名(下标1,下标2),注意:下标1表示行数,下标2表示列数,无论行还是列都是从0开始,到长度-1结束
Sub text()
'二维数组的定义方式
'dim 数组名(数组下标1,数组下标2) as 数据类型
Dim arr(3, 3) As Integer
Dim i%, j%
arr(0, 0) = 1
arr(1, 0) = 2
arr(2, 0) = 3
arr(0, 1) = 4
arr(1, 1) = 5
arr(2, 1) = 6
arr(0, 2) = 6
arr(1, 2) = 7
arr(2, 2) = 8
For i = 0 To 2
For j = 0 To 2
MsgBox (arr(i, j))
Next j
Next i
End Sub
Sub text1()
Dim arr(3, 3), i, j As Integer
For i = 0 To 2
For j = 0 To 2
arr(i, j) = Cells((i + 1), (j + 1))
Next j
Next i
For i = 0 To 2
For j = 0 To 2
MsgBox (arr(i, j))
Next j
Next i
End Sub
Sub text2()
Dim arr(3, 3), i, j As Integer
For i = 0 To 2
For j = 0 To 2
arr(i, j) = Cells((i + 1), (j + 1))
Next j
Next i
For i = 0 To 2
MsgBox (arr(i, i))
Next i
End Sub
Function fn()
fn = "hello world"
End Function
Sub test1()
'调用fn种的内容
MsgBox (fn())
End Sub
Function fn() As String
fn = "hello world"
End Function
Sub test1()
'调用fn中的内容
MsgBox (fn())
End Sub
形参:定义函数时所使用的参数被称为形参,形参的本质就是用来存储函数调用时传递过来的具体数据,简答说形参就是变量,定义格式:(形参名1 as 数据类型,形参名2 as 数据类型…. )
实参:调用函数时传递过来的具体的数据被称为实参,格式:函数名(实参1,实参2…)
' 形参
Function fn(num1, num2 As Integer) As Integer
Dim sum%
sum = num1 + num2
fn = sum
End Function
Sub getSum()
' 实参
MsgBox (fn(1, 2))
End Sub
在sheet中调用
注意:需要在Visual Basic中插入一个模块,将函数写在该模块中,就可以在单元格中直接调用自己写好的函数啦
Function fn(arr)
Dim i%, sum%, max%, min%, avg As Double
sum = 0
For i = 0 To UBound(arr)
sum = arr(i) + sum
Next i
avg = sum / (UBound(arr) + 1)
max = arr(0)
For i = 0 To UBound(arr)
If max < arr(i) Then
max = arr(i)
End If
Next i
min = arr(0)
For i = 0 To UBound(arr)
If min > arr(i) Then
min = arr(i)
End If
Next i
fn = "sum is :" & sum & "," & "avg is " & avg & "," & "max is :" & max & "," & "min is :" & min
End Function
Sub test2()
Dim my_arr(9), i As Integer
For i = 0 To UBound(my_arr)
my_arr(i) = Cells(i + 1, 1)
Next i
MsgBox (fn(my_arr))
End Sub