您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Excel-VBA基础
1.什么是ExcelVBA?VisualBasicForApplicationVBA是一种编程语言,是建立在Office中的一种应用程序开发工具。它可以有效地自定义和扩展Excel的功能。例如:操作表格的任意属性(颜色、字体等)、迅速完成大量重复的操作。启用宏的Excel文件,后缀名为xlsm。---------------------------------------------------------数据处理神器!宏是用VBA代码保存的程序,是录下的用户对Excel的操作。①②③④⑤⑥但是,录制的宏执行起来却不方便。因此,最好将宏指定给按钮来执行。①②③④⑤但是,录制的宏无法进行判断和循环,无法进行人机交互,因此需要掌握VBA编程的方法。2.开始VBA编程VBE(VBA编辑窗口)快捷键:Alt+F11工程资源管理器属性窗口立即窗口代码窗口菜单栏工具栏开始语句注释语句结束语句代码:录制宏或者自主编写过程:执行某些动作的代码组合,Sub过程(不返回运行结果)、Function过程(返回运行结果)模块:保存过程,一个模块可以保存多个不同类型的过程对象:用代码进行操作的即是对象,如单元格、图片、工作表、透视表Application.Workbooks(1).Worksheets(Sheet1).Range(A1)属性:每个对象都有属性,如字体的颜色、单元格的宽度。对象和属性之间使用.连接。如:Range(A1).Value方法:在对象上执行的动作,对象和方法之间也使用.连接。如:Range(A1).Select事件:事件就是由用户或者系统触发的,可以在代码中响应的一段代码。如打开工作簿、激活工作表、改变单元格的值字节型整数型长整数型单精度浮点型双精度浮点型货币型小数型日期型字符串型布尔型声明变量:Dim变量名As数据类型变量名必须以字母或汉字开头,不能包含空格、句号、感叹号、@、#、$、&例如:DimStrAsString*10※10指定变量能存储字符的最大长度数据类型类型声明符Integer%Long&Single!Double#Currency@String$变量类型声明符,例如:DimStr$声明多个变量,可以写在同一个Dim后面,变量名之间用逗号隔开如果不指定变量的数据类型,则默认为Variant型,但会占用更大的存储空间,故应尽量避免使用Variant型强制声明变量:菜单栏工具→选项→勾选要求变量声明;这样VBA会在每个模块第一句自动写下OptionExplicit变量的作用域:决定变量可以在哪个模块或过程使用变量区分描述作用域本地变量在过程中用Dim或Static声明变量单个过程模块变量在模块第一个过程前用Dim或Private声明变量单个模块公共变量在模块第一个过程前用Public声明变量所有模块给变量赋值:变量名称=数据,例如:str=VBAd=#2016-1-1#如果给对象变量赋值(Object型,如单元格),Set变量名称=对象,例如:Setrng=Worksheets(Sheet1).Range(A1)常量:Const常量名称As数据类型=数值,常量的作用域用法与变量一致,例如:ConstpAsString=3.14数组:同种类型多个变量的集合,数组中的元素按次序存储在数组中,通过索引号进行区分,数组也是变量;Dim/Public数组名(atob)As数据类型,a和b分别是数组的起始和终止索引号。声明数组时,也可以用一个自然数指定数组的大小,该自然数为数组的最大索引号,默认起始索引号为0给数组赋值:要分别给数组中的每个元素赋值,数组名(1)=XX多维数组:Dim/Public数组名(atob,ctod)As数据类型动态数组:若声明数组时不能预知数组大小,可以首次定义数组时括号内为空,Dim数组名(),然后再程序中使用ReDim语句重新定义数组大小。其它创建数组的方式:Array函数OptionExplicitSubArrayTest()DimarrAsVariant'将1到10十个自然数赋给数组arrarr=Array(1,2,3,4,5,6,7,8,9,10)MsgBoxarr数组的第2个元素为:&arr(1)EndSubSplit函数OptionExplicitSubSplitTest()DimarrAsVariant'利用split生成数组arr=Split(王,何,张,赵,冯,刘,,)MsgBoxarr数组的第2个元素为:&arr(1)EndSubUBound和LBound函数:计算最大和最小索引号,UBound(数组名)Join函数:可以将一维数组元素使用指定分隔符连接成新的字符串,Join(数组名,@)符号作用示例算术运算符\相除取整数7\2=3^指数2^3=8Mod求模,相除取余数7Mod2=1比较运算符不等于Is比较两个对象引用的变量是否相同Like两个字符串是否匹配通配符*代替任意多个字符?代替任意一个字符#代替任意一个数字[Charlist]代替在Charlist中的任意一个字符bLike[a-d]=True[!Charlist]代替不在Charlist中的任意一个字符符号语法作用连接运算符+?a+b(在立即窗口输入,会显示问号后命令的结果)若表达式两边包含数值,则执行算术运算&?a&b逻辑运算符And表达式1And表达式2与Or表达式1Or表达式2或NotNot表达式1非Xor表达式1Xor表达式2异或,两个返回值不同返回TrueEqv表达式1Eqv表达式2等价,两个返回值相同返回TrueImp表达式1Imp表达式2蕴含,1True且2False时返回False,否则True优先级运算符备注1()2^3相反数-4*、/5\整除,相除取整数6Mod求模,相除取余数7+、-8+、&连接9=、、、、=、=、Like、Is同级运算从左往右顺序10And与11Or或12Not非13Xor异或14Eqv等价15Imp蕴含VBA函数:VBA函数使用方法与Excel类似,可选中函数后按F1查看帮助,在代码窗口输入VBA.会显示函数列表供你选择;Submyabs()a=InputBox(请输入数值:,提示)labs=Abs(a)MsgBox你输入的值的绝对值为:&labsEndSub但不是所有的函数在VBA里都可以直接调用,此时只需要在函数名称前加上Application.WorksheetFunction语句即可。例如计算非空单元格个数application.worksheetfunction.counta(range(a1:a10))程序控制语句:分为判断、分支、循环三种If语句:例如判断A1单元格的数是否能被2、3、5其中之一整除Subtest()If[a1]=ThenMsgBoxA1单元格没有输入任何内容!ElseIf[a1]Mod2=0ThenMsgBoxA1单元格的数能被2整除!ElseIf[a1]Mod3=0ThenMsgBoxA1单元格的数能被3整除!ElseIf[a1]Mod5=0ThenMsgBoxA1单元格的数能被5整除!ElseMsgBoxA1单元格的数不能被2、3、5其中之一整除!EndIfEndSubSelectCase语句:在设置条件时,应把最有可能发生的情况写在前面SubTest()If[a1].Value=ThenMsgBoxA1单元格没有输入数字ExitSub‘退出程序EndIfSelectCase[a1].Value‘测试表达式CaseIs30‘表达式列表,与测试表达式进行比较MsgBox差CaseIs60MsgBox不及格CaseIs80MsgBox及格CaseIs90MsgBox良好CaseElseMsgBox优秀EndSelectEndSubFor...Next语句:Sub求1到10000之间奇数和()DimI&,J&ForI=1To10000Step2J=J+INextMsgBox1到10000之间奇数和为&JEndSubForEach...Next语句:Subshtname()DimiAsInteger,shtAsWorksheeti=1ForEachshtInWorksheetsCells(i,1)=sht.namei=i+1NextEndSubSubmysum()DimLsumAsLong,iAsLongi=1DoLsum=Lsum+ii=i+1LoopWhilei=1000MsgBox1到1000的自然数和为:&LsumEndSubSubmysum()DimLsumAsLong,iAsLongi=1DoWhilei=1000Lsum=Lsum+ii=i+1LoopMsgBox1到1000的自然数和为:&LsumEndSubDoWhile语句:有开头判断和结尾判断两种Submysum()DimLsumAsLong,iAsLongi=1DoLsum=Lsum+ii=i+1LoopUntili1000MsgBox1到1000的自然数和为:&LsumEndSubSubmysum()DimLsumAsLong,iAsLongi=1DoUntili1000Lsum=Lsum+ii=i+1LoopMsgBox1到1000的自然数和为:&LsumEndSubDoUntil语句:有开头判断和结尾判断两种GoTo语句:通常用来作错误处理,但增加阅读调试难度,尽量避免使用Submysum()DimLsumAsLong,iAsLongi=1x:‘设置标签,使用带冒号的字符串或者不带冒号的数字Lsum=Lsum+ii=i+1Ifi=1000ThenGoToxMsgBox1到1000的自然数和为:&LsumEndSubWith语句:对相同对象进行多次操作时,可以简化代码,提高运行效率SubFontSet()WithWorksheets(Sheet1).Range(A1).Font.Name=宋体‘字体.Size=13‘字号.Bold=True‘加粗.ColorIndex=3‘颜色EndWithEndSub
本文标题:Excel-VBA基础
链接地址:https://www.777doc.com/doc-1221856 .html