一、前言
在最近的工作中,有幸了解到VBA相关的知识,它主要是被应用于我们平时所使用的word和Excel中,主要用VBA代码来进行数据处理,在办公领域使用的比较广泛。通过一段时间的学习,总结了一些自己的理解和所学,在此于大家进行分享。
Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic 脚本。该语言于1993年由微软公司开发的的应用程序共享一种通用的自动化语言——–Visual Basic For Application(VBA),实际上VBA是寄生于VB应用程序的版本。微软在1994年发行的Excel5.0版本中,即具备了VBA的宏功能。
二、编程规则
- 1.EXCEl的数据类型:日期值、数值、文本、逻辑值、错误值
- 2.VBA的数据类型:布尔型、整数型、小数型、字符串型、日期型、对象型,变体型、用户自定义类型(其中对象型需要多多了解),可以了解VBA为弱类型语言
- 3.声明变量:Dim 变量名 As 数据类型,可以定义不同的作用域(Public、Private、Static),Option Explicit加上这段代码可以强制声明所有变量
- 4.给数据类型的变量赋值:[Let] 变量名 = 要存的数据 (中括号的关键值可以省略)
- 5.给对象类型的变量赋值:set 变量名 = 要存储的对象名称。
- 6.可同时生成多个变量
- 7.声明常变量
- 8.声明数组:Dim 数组名 (a to b) As 数据类型,可以声明多维多维数组
- 9.可使用变量类型声明符定义变量类型:Dim Str As String 相当于 Dim Str$
- 10.声明变量时不指定变量类型那么这个变量就是变体形
那么接下来我们就来看一看一些基础的VBA代码:
Sub 测试()Dim arr() As VariantDim brr() As VariantDim i As IntegerDim Length As IntegerDim Longth As IntegerWorksheets("利润表").SelectLength = Range("A1").End(xlDown).RowFor i = 1 To Length Step 1Range("D" & i) = Cells(i+1,"E") + Cells(i+1,"F")NextWorksheets("合计表").SelectLongth = Range("C2").End(xlDown).RowFor i = 1 To Longth Step 1Range("E" & i) = Cells(i,"C") - Cells(i,"D")NextEnd Sub
VBA中使用Dim来定义变量,一般原型为 Dim 变量 As 数据类型,比如:
Dim arr() As Variant
Dim length As Integer
通过Dim来定义两个变量,定义一个数组的变量和一个定义长度的变量。它们的数据类型分别为Variant和Integer.
各数据类型所能表示的最大长度:
类型名称 类型 长度
比特 Byte 0到255
Integer -32768 ---- 32767
Long -2147483648----2147483647
单精度浮点型 single 1.401298*10^-45----3.402823*10^38
双精度浮点型 Double 4.94065645841247*10^-324------1.7969313486232*10^308
日期型 Date 100年1月1日 ------9999年12月31日
字符串型 不定长 0---20亿
定长 1到65400
变体型 Variant 保存任意值
访问某个表格中的单元格,一般的访问路径为:Excel程序--->工作簿---->工作表---->单元格:

三、运算符
1.算术操作符
+ : 两个操作数相加
- : 两个操作数相减
* : 两个操作数相乘
/ : 两个操作数相除
% : 模运算符,整数除法后的余数
^ : 指数运算符
2.比较运算符
= : 检查两个操作数的值是否相等。如果是,那么条件是真。
<> : 检查两个操作数的值是否不相等。如果值不相等,则条件为真。
> : 检查左操作数的值是否大于右操作数的值。如果是,那么条件是真。
< : 检查左操作数的值是否小于右操作数的值。如果是,那么条件是真。
>= : 检查左操作数的值是否大于或等于右操作数的值。 如果是,那么条件是真。
<= : 检查左操作数的值是否小于或等于右操作数的值。如果是,那么条件是真。
3.逻辑运算符
AND : 两个条件都为真,则表达式为真。
OR : 如果两个条件中的任何一个为真,则条件为真。
NOT : 用于反转其操作数的逻辑状态。 如果条件成立,那么逻辑非运算符结果是条件不成立。
XOR : 如果表达式中只有一个表达式的值为True,则结果为True。
4.连接操作符
& : 连接两个值
1 & 2 = 12
"1" & "2" = 12
+ : 将两个值添加为变量,其值是数字
1 + 2 = 3
"1" + "2" = 12
四、基础代码认识
1.VBA对单元格的操作1.获取单元格的值Sub alert()'A1 = Sheets(1).[a1] '获取第一个工作表(表名为工作表1)中A1的值赋值给X'A1 = Sheets("工作表1").[a1]'A1 = Sheets(1).Cells(1, 1)'A1 = Sheets("工作表1").Cells(1, 1)A1Range("A1").Value '获取当前工作表A1的值MsgBox (A1) '弹出对话框End Sub1.单元格赋值Sub setVal()Range("A1").Value = 100 '点击VBAProject窗口的'运行子过程'End Sub2.设置单元格的填充色Sub setColor()Range("B3").Interior.ColorIndex = 3 '值有1-56,代表56种颜色End Sub3.单元格的复制、粘贴Sub cut()Range("B3").copy Range("C3") '将B3的值,复制到C3单元格End Sub4.单元格的剪切Sub cut()Range("A1").cut Range("B3") '将A1的值,剪切到B3单元格End Sub2.条件判断结构if then 语句Sub if_test()B3 = Range("B3").ValueIf B3 > 10 ThenMsgBox ("大于10") '弹出字符串时,必须为双引号ElseIf B3 < 10 ThenMsgBox ("小于10")ElseMsgBox ("aaaa")End IfMsgBox (B3)End Sub
3.选择判断结构Select Case 语句Sub select_test()B3 = Range("B3").ValueSelect Case B3Case 1 To 10msg = "1到10之间"Case 11 To 20msg = "11到20之间"Case 21, 22msg = "21,22的值"Case Elsemsg = "其他的值"End SelectMsgBox (msg)End Sub
4.循环结构for next 语句Sub for_test()For i = 1 To 10 Step 1If i > 5 Then Exit For '跳出for循环End IfRange("D" & i).Value = i '循环赋值给D1-D10Next iEnd Subfor each 语句:用于为数组或集合中的每个元素Sub for_ecah_test()fruits = Array("苹果", "香蕉", "雪梨")For Each Item In fruitsMsgBox (Item)NextEnd Subdo while loop Sub do_while_loop_test()Do While i < 5 '在循环开始时,判断条件是否符合If i > 3 ThenMsgBox ("跳出循环")Exit DoEnd Ifi = i + 1MsgBox ("The value of i is : " & i)LoopEnd SubSub do_while_loop_test()Do If i > 3 ThenMsgBox ("跳出循环")Exit DoEnd Ifi = i + 1MsgBox ("The value of i is : " & i)Loop While i < 5 '在循环结束时,判断条件是否符合End Sub
















