Excel VBA 学习笔记
ExcelVBA学习总结
ExcelVBA学习总结数据结构有云:程序=数据+操作。
从中可以看出,数据才是程序的核心对象,每个程序所有的操作和意图都是围绕数据展开的。
每个程序的结构基本都分为三个部分:输入,处理,输出。
输入是接收用户的数据,处理过程是通过不同的算法处理接收的数据,输出是将处理的结果返回给用户。
一、输入与输出大家还记得在VBA我们一般通过什么方式接受用户的简单输入呢?没错,最简单的方式就是Msgbox与InputBox。
Msgbox:最简单的用户输入框Msgbox太简单了,以至于大家用的最多的就是其显示信息的功能,其实它是有返回值的。
它的语法如下所示:MsgBox(Prompt[,Buttons][,Title][,Helpfile,Context]) As Integ er这里用户的输入就是他选择的按钮,也就是Integer值所代表的选项。
这里用户的选择比较简单,所以不用验证。
InputBox:最简单的全能型用户输入框VBA内置的InputBox方法这个函数返回一个字符串,选择取消后返回空串(零个字节的字符串)。
它不含有容错处理。
例如你想要用户输入整数,结果用户输入了字符,这个时候InputBox并不会替你告诉用户错误的原因。
Application的InputBox函数这个函数更强大,内置容错处理,选择取消后返回false。
这个函数可以指定输入的类型,当用户输入的数据类型与参数中指定的类型不兼容的时候,这个函数会给出温馨的提示,告诉你输入的数据类型不对。
除了这两种最简单的输入方式外,还有其它一些重要的输入方式:单元格输入:这种方式是最常见的,用户在单元格中输入数据,然后程序获取单元格中数据并处理。
用户窗口输入:这种方式最直观,比较适合处理结构化数据;利用窗口,我们可以提供专业的用户视觉体验和便利的用户输入体验。
文件输入:这种方式适合导入大量的数据或其它来源的数据。
说完了输入,再说说输出。
VBA中输出也有相对应的几种方式:Msgbox:最简单的输出信息方式。
Excel中VBA编程学习笔记(一)
Excel中VBA编程学习笔记(一)1、注释及编码规则注释:1.单引号:可以位于句子结尾或者单独一行;2.Rem:单独一行编码规则:1.如果VB中的关键字是由多个英文字母组成,则系统自动将每个单词的首字母转换成大写字母,其余字母一律转换成小写字母。
2.对于用户自定义的变量名、过程名、函数名,VB以第一次定义的为准,以后输入的自动转换成首次的形式。
3.如果在同一行写多条语句,语句间要用冒号“:”隔开。
例如:Form1.Width = 300 : Form1.Caption = “VB!”1.如果一条语句在一行写不下,可以分多行写,续航符为:一个空格后面跟一个下划线“_”。
例如:Address = “天津市河北工业大学” + _“现代化教学中心” + _“计算机技术基础教研室”2、类模块在Excel VBA中类模块就相当于一个类,类模块的名字就是类名。
下面为定义的一个类Class1,并且有些基本属性及一个初始化函数【例】下面定义一个类Class1,Private name, sex As StringPrivate age As IntegerPublic rng As RangeSub class_initialize() '初始化sex = "男"age = 20End SubPublic Property Get GetName() As VariantGetName = nameEnd PropertyPublic Property Get GetSex() As VariantGetSex = sexEnd PropertyPublic Property Get GetAge() As IntegerGetAge = ageEnd PropertyPublic Property Let SetName(newName As String)name = newNameEnd PropertyPublic Property Let SetSex(newSex As String)sex = newSexEnd PropertyPublic Property Let SetAge(newAge As Integer)age = newAgeEnd PropertyPublic Function GetInfo() As StringGetInfo = "姓名:" & name & ";性别:" & sex & ";年龄:" & ageEnd FunctionPublic Property Get maxNumer(num As Integer) As Integer maxNumber = Application.WorksheetFunction.Max(num, age)End PropertyPublic Property Set SetBckColor(myRng As Range)myRng.Interior.ColorIndex = 3End Property新建一个过程Sub test()Set tmp = New Class1Debug.Print tmp.GetAge() '20tmp.SetName = "张三"tmp.SetAge = 23Debug.Print tmp.GetInfo() '姓名:张三;性别:男;年龄:23Set tmp.SetBckColor = Sheet3.Rows(1) ‘将Sheet3的第一行背景色设置为红色End Sub3、新建对象及常用对象新建一个模块。
excel-vba学习笔记
1、根据条件删除行和列
2、相对引用:带规则操作,带公式操作
绝对引用:跨工作簿,不带规则和公式操作
3、宏快速执行键ctrl+X会覆盖原有windows剪切操作;
4、绘制宏执行遥控板;
5、range("a5:a"&i).select选择有内容的矩形区域
6、多列接成一列:共16*301个单元格数据,区域为A1:KY16
则,在某单元格输入:
=OFFSET($A$1,MOD(ROW(A1)-1,16),INT((ROW(A1)-1)/16))
并往下拉。
offset为引用复制函数,$A1$为基准单元格,MOD(ROW(A1)-1,16)为上下偏移量,INT((ROW(A1)-1)/16)为左右偏移量。
mod是取余数函数,row(A1)是返回行号,int是取整函数。
7、把一列80行的数据,拆成8行*10列:
offset($A$1,(COLUMN(A1)-1)*8+ROW(A1)-1,0)并往右拉,往下拉(COLUMN(A1)-1)*8是形成以8为周期的循环,而且要引入列标,固定某一列,ROW(A1)-1即在固定一列后,按行标递增引用,(COLUMN(A1)-1)*8+ROW(A1)-1为总偏移量。
-----把总偏移量拆分成与列有关的循环和与行有关的序列填充。
excel2010 vba笔记 (实战教程)(基础实例)
VBA笔记8-211.VBA是什么:微软开发出来的应用程序一种能共享通用的自动化语言,VBA能使已有的应用程序(excel等)自动化,可以创建自定义的解决方案.等同:可以用excel的宏语言来使excel自动化,使用word BASIC使word自动化,等等。
VBA可以称作excel的“遥控器”.此外,如果你愿意,还可以将excel用做开发平台实现应用程序.2.VBA可以实现的功能1. 使重复的任务自动化.2. 自定义excel工具栏,菜单和界面.3. 简化模板的使用.4. 自定义excel,使其成为开发平台.5. 创建报表.6. 对数据进行复杂的操作和分析.3.宏3.1录制简单的宏选择“工具”—“宏”—“录制新宏”—输入宏名—确定—开始录制(状态栏中显示“录制”)—结束宏录制(“工具”—“宏”—“停止录制”。
)*开始录制并非一个按钮,而是你的一系列操作,宏会记录下来变为自己的操作。
3.2执行宏选择任何一个单元格—选择“工具”—“宏”—“宏”(出现“宏”对话框)—选择相应的宏名—“执行”。
3.3查看录制的代码工具”—“宏”—“宏”(显示“宏”对话框)—选择某个宏—“编辑”VBA的编辑器窗口(VBE)Sub 改变颜色() //宏名’’改变颜色Macro’xw 记录的宏2000-6-10’’//以上五行录制时自动生成Range("A5").Select //表示无论选择哪个单元格,最后都只作用于A5With Selection.Interior//设置属性在选择区域的内部(开始录制属性).ColorIndex = 3 //颜色为3号色:红色.Pattern = xlSolid //区域内部图案=纯色(录制时自动生成,可删)PatternColorIndex = xlAutomatic //内部图案底纹颜色=自动(自动生成,可删)End With //结束属性录制End Sub//结束宏录制一个名为练习的宏:Sub 练习()'' 练习宏''With Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous.ColorIndex = 0.TintAndShade = 0.Weight = xlMediumEnd WithWith Selection.Borders(xlEdgeTop).LineStyle = xlContinuous.ColorIndex = 0.TintAndShade = 0.Weight = xlMediumEnd WithWith Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous.ColorIndex = 0.TintAndShade = 0.Weight = xlMediumEnd WithWith Selection.Borders(xlEdgeRight).LineStyle = xlContinuous.ColorIndex = 0.TintAndShade = 0.Weight = xlMediumEnd WithSelection.Borders(xlInsideVertical).LineStyle = xlNoneSelection.Borders(xlInsideHorizontal).LineStyle = xlNoneWith Selection.Interior.Pattern = xlSolid.PatternColorIndex = xlAutomatic.Color = 5296274.TintAndShade = 0.PatternTintAndShade = 0End WithWith Selection.Font.Color = -16727809.TintAndShade = 0End WithEnd Sub3.4为宏指定快捷键创建宏时指定:只须在录制宏时在输入宏名后,在“快捷键”文本框中输入相应的键。
ExcelVBA学习笔记
ExcelVBA学习笔记Excel篇锁定区域第一步、选中所有单元格然后右键“设置单元格格式”选中保护选项卡,取消”锁定和隐藏复选框”的勾。
第二步、选中要锁定的单元格(也就是要保护的单元格),右键“设置单元格格式”选中保护选项卡,把”锁定和隐藏复选框”前面的勾上。
第三步、在“审阅(offeic2007版)”,“(offic2003版,在工具/保护/保护工作表)”菜单栏下找到保护工作表,弹出对话框,把“选定锁定单元格“的勾去除,把“选定未锁定的单元格”的复选框勾选(这样的话锁定的单元格将无法选取)。
如果需要可以继续插入行列,则需要在对话框里勾选“插入行“或“插入列“。
这里可以选择是否设置密码。
冻结窗口1、单击行编号(1,2,3……)—窗口—冻结窗口,可以实现编号上边的行被冻结;2、点击列标(A,B,C……)—窗口—冻结窗口,可以实现列标签左边部分被冻结;3、点击单元格—窗口—冻结窗口,可以实现单元格左边部分和上边同时被冻结。
数据列排序首先选择标题行,然后点击菜单栏的“数据”—“筛选”—“自动筛选”。
日期函数1. 计算某个月份的数据总和(日期列B,数据列D,指定日期B14)=SUMPRODUCT((MONTH($B$3:$B$400)=MONTH(B14))*$D$3:$D$400)2. 计算某个时期的数据总和(日期列B,数据列F,指定日期C4/C5)=SUMPRODUCT((B$3:B$400<=C5)*(B$3:B$400>=C4)*F$3:F$400)3. 时间判断函数,如果今天与指定日期l6的日期间隔小于30天,显示"需要续租"=IF(DATEDIF(TODAY(), I6, "d")<30, "需要续租","正常")函数技巧1. 使用$来锁定行或列,以后拖拉单元格时不会自动变化,例如=sum(F$3:F$400)2. 用连字符“&”来合并文本(此处假定将B、C、D列合并到一列中)=B1&C1&D13. 文本提取函数(RIGHT,LEFT,MID)=MID(A5,4,2)4. 财务填充函数(REPT)在A2单元格里的数字结尾处用“#”号填充至16位=A2&REPT("#",16-LEN(A2))5. 引用其他数据表的单元格<数据表名>!<单元格名>自定义数据颜色在工资表中,如果想让大于等于2000元的工资总额以“红色”显示,大于等于1500元的工资总额以“蓝色”显示,低于1000元的工资总额以“棕色”显示,其它以“黑色”显示,我们可以这样设置。
ExcelVBA学习总结
ExcelVBA学习总结VBA的对象是有很多共性的,抛开它们所在层次的不同,它们的很多操作特征是一样的,比如它们都包括子对象集合,都包括某些激活操作,删除操作等等。
像简单的Activate,Delete,Cut类似的操作我就不详细说了。
下面我先总结一下这些共性中出镜率最多的类型:Collection,然后分析一下与之类似的两种常用类型,总结它们的不同。
选择集合的时候,要充分考虑它们的特性和实际的问题,采用合适的集合解决问题。
1. 集合定义集合的方法:Dim col as New Collection•Add:往集合中添加一个元素,需要提供添加到集合中的元素,也可以提供一些其它可选的参数,比如键值、位置等。
•Remove:移除集合中的一个元素,需要提供该元素的Index值。
•Count功能:返回集合中元素的数目。
•Item功能:获取集合中的一个元素,由于Item是集合的默认属性,所以可以直接拿集合对象获取元素。
参数:提供Index值(基本都是从1开始),Name都是可以的(使用Name时要注意,必须给元素的Name赋过值)。
例如:Workbooks(1),Worksheets(“Name”),Workbooks.Item(1)是等价的。
小例子如下:Sub TestCollection()Dim col As New CollectionWith col.Add (0).Add (1).Add (2)End Withcol.Remove (1)MsgBox col.CountDim i As VariantFor Each i In colMsgBox iNextDim j As IntegerFor j = 1 To col.CountMsgBox col.Item(j)NextEnd SubVBA的很多对象中都包括集合,但是这些集合中的对应方法已经做出了修改,使用时要注意参数和返回值。
例如Workbooks集合Add方法就返回新添加的Workbook;Worksheets集合Add方法返回新添加的Worksheet。
Excel中VBA编程学习笔记(十七)...
Excel中VBA编程学习笔记(十七)...【例1】使用Connection对象,从数据库test.accdb的students表查询所有数据并存放到Sheet1表中。
Sub test()Dim cnn, rstSet cnn = CreateObject("ADODB.Connection")Set rst = CreateObject("ADODB.Recordset")Dim conStr$, sqlStr$conStr = "provider=Microsoft.ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb;"cnn.Open conStrsqlStr = "select * from students"Worksheets("Sheet1").[A2].CopyFromRecordsetcnn.Execute(sqlStr)MsgBox "操作完成"cnn.CloseEnd Sub操作结果如下:【例2】使用RecordSet对象,从数据库test.accdb的students 表查询所有数据并存放到Sheet1表中。
Sub test()Dim cnn, rstSet cnn = CreateObject("ADODB.Connection")Set rst = CreateObject("ADODB.Recordset")Dim conStr$, sqlStr$conStr = "provider=Microsoft.ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb;"cnn.Open conStrsqlStr = "select * from students"rst.Open sqlStr, cnnWorksheets("Sheet1").[A2].CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingEnd Sub注:数据库及表均跟例1相同。
Excel中VBA编程学习笔记(五)
Excel中VBA编程学习笔记(五)28、程序运行时间统计Sub test()begin_time = TimerFor i = 1 To 1000For j = 1 To 10000x = x + 1 * 2NextNextend_time = TimerMsgBox "运行用时" & Format(end_time - begin_time, "0.00") End Sub29、split函数及join函数split函数用于分割字符串并返回一个下标从0开始的数组,它包含指定的自字符串数目Dim direcSet direc = CreateObject("Scripting.Dictionary")contents = Split(Content, ",") ‘分割符为逗号For k = LBound(contents) To UBound(contents)direc(contents(k)) = direc(contents(k)) + 1NextKey = direc.KeysValue = direc.items[B1].Resize(direc.Count, 1) = Application.Transpose(Key)[C1].Resize(direc.Count, 1) = Application.Transpose(Value)jion函数返回一个字符串,该字符串通过连接某个一维数组的多个自字符串而创建的arr = [{"武汉","广州","深圳"}]res = Join(arr, ";") '得到武汉;广州;深圳30、filter函数filter函数返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集。
ExcelVBA学习笔记(1)
ExcelVBA学习笔记(1)其实很久之前我就有系统学习VBA的想法,也曾经买过书,看过一些视频,但无奈VBA从入门到入土,各种拖沓,各种原因,以至于不了了之。
这次趁疫情居家,给自己定了一个学习目标,学完B站孙兴华的VBA课程。
这里推荐B站的孙兴华老师,之前Power Query,Power BI等,我都有听他的课,感觉真是个宝藏老师。
孙老师有很多课程,Excel系列,SQL,Access,Python等等,甚至线性代数,都是无偿分享的。
如果你有兴趣可以去了解一下,当然如果你有好的学习资源,也欢迎一起分享呀。
这里记录自己的一些学习笔记,希望自己能学有所得,加油ヾ(◍°∇°◍)ノ゙01For...Next 循环语法:For 循环变量 = 初值 To 终值【Step 步长值】循环体(要循环执行的操作或计算)Next 【循环变量】【】括号内的代码可以省略。
步长值为1时可以省略。
例如新建5张工作表:Sub 新建5张工作表()Dim i As IntegerFor i = 1 To 5Worksheets.AddNextEnd Sub02Do While...loop循环语法:Do While 条件如果条件为True执行的代码……..loop同样我们来看如何新建5张工作表:Sub 新建5张工作表()Dim i As Integeri = 1Do While i<=5Worksheets.Addi=i+1LoopEnd Sub大学里我学的唯一编程课程是VB,记得没错的话,这两个循环语句应该在VB里面学过。
03For Each...Next 循环For Each...Next 循环用于针对一个数组或一个集合中的每一个元素重复执行一组代码。
语法:For Each <元素> in <集合>循环体Next元素是用来遍历集合中所有元素的变量。
例如我们提取工作表的名称:Sub 提取工作表名()Dim i, j i = 1 For Each j In Worksheets Range('A' & i) = i = i + 1 NextEnd Sub04工作表批量另存为多个PDF。
ExcelVBA自学笔记
ExcelVBA自学笔记一、对象、集合、属性与方法介绍1.对象对象就是客观存在的东西,是具体存在的事物,如:桌子、电脑等。
E某celVBA中的对象是指在E某cel里操作和控制的东西,如:工作表、单元格、图片等。
VBA通过代码类操作E某cel,处理数据。
编写VBA程,就是编写VBA语句引用对象,有目的的操作它。
引用对象就是指明对象的位置或名称,把它同集合里的其他对象区别开来。
2.集合集合也是对象,是包含一组相关对象(多个同种类型的对象)的对象,例如,三个工作表是同一类型的对象,可以用“工作表”来称呼它们,“工作表”为集合名称。
只要集合中发生变化,集合中的对象的位置就可能发生变化;因此,集合内任何特定对象的位置均可改变。
3.属性每个对象都有属性。
对象的属性可以理解为对象具有的特点,如颜色。
对象的属性还可以理解为对象包含的其它对象。
书写时,对象和属性之间用点(.)连接,对象在前,属性在后。
例如:Sheet1工作表的A1单元格,表示为Workheet(“heet1”).Range(“A1”)4.方法每个对象都有方法。
方法是指在对象上执行的某个动作,例如:打开工作簿、复制工作表、选中单元格,这里的打开、复制、选中即为在对象上执行的动作。
对象和方法之间用点(.)连接,对象在前,方法在后。
例如:选中A1单元格,表示为Range(“A1”).Select二、变量变量用来保存程序运行过程中需要临时保存的数据或对象。
声明变量就是指定变量的名称和可以存储的数据类型。
语法:Dim变量名A数据类型声明变量有如下4种语法:Dim变量名A数据类型本地变量Private 变量名A数据类型模块级变量Public变量名A数据类型公共变量Static 变量名A数据类型静态变量变量的作用域:决定该变量可以在哪个模块中使用。
本地变量:在一个过程中使用Dim或Static语句声明的变量,只有声明变量的语句所在的过程可以使用它。
(作用域为当前过程)模块级变量:在模块的第一个过程之前使用Dim或Private语句声明的变量,该模块里的所有过程都可以使用它。
Excel2007VBA参考大全ver0.0 读书笔记
目录第一章:Excel VBA基础 (4)1录制宏: (4)2用户自定义函数 (4)3 Excel对象模型 (4)集合 (5)属性 (5)方法 (5)事件 (5)4 VBA语言 (5)基本的输入输出 (5)调用函数和子过程 (5)括号和参数列表 (6)变量声明 (6)变量的作用域和生存期 (7)变量类型 (7)对象变量 (7)做出判断 (7)循环 (9)数组 (9)运行时错误处理 (10)第二章:Application对象 (10)1全局: (10)2 Active属性: (10)3 显示警告: (10)4 屏幕刷新: (10)5 Application的Evaluate方法: (10)6 InputBox: (11)7 状态栏: (11)8 SendKeys: (11)9 OnTime: (12)10 OnKey: (12)11 工作表函数: (12)12 Caller: (12)第三章:工作薄和工作表 (12)1 Workbooks集合: (12)添加Workbook对象 (13)从路径中获取文件名 (13)在相同目录中的文件 (13)覆盖现有的工作薄 (13)保存改变 (14)2 Sheets集合: (14)工作表(Worksheet) (14)工作表的复制和移动 (14)组合工作表 (14)3 Windows对象: (15)第四章:使用单元格区域 (15)1 Range对象的Activate方法和Select方法: (15)2 Range属性: (15)活动工作表中的单元格区域 (16)非活动工作表中的单元格区域 (16)Range对象的Range属性 (16)Cells属性 (17)Range对象的Item属性 (17)在Range中使用Cells (17)关于Range对象的Cells属性 (18)单个参数的单元格区域引用 (18)3 Offset 属性: (18)4 Resize属性: (18)5 SpecialCells方法: (18)确定最后一个单元格 (19)删除数字 (19)6 CurrentRegion属性 (19)7 End属性: (19)8 单元格区域求和: (19)9 Columns属性和Rows属性: (19)10 Count属性 (19)11 Areas属性 (20)12 Areas集合 (21)13 Union方法和Intersect方法: (21)14 空单元格: (21)第五章:使用名称 (21)1 Name对象 (21)2 Names属性 (21)s 属性 (22)s属性 (22)s属性 (22)3 Name对象的Name属性: (23)4 命名单元格区域 (23)创建全局名称 (23)创建局部名称: (23)5 在名称中存储值 (23)6 存储数组 (24)7 隐藏名字: (24)8 处理命名的单元格区域: (24)9 搜索名称: (24)第六章:数据列表 (25)1 结构化数据: (25)2 排序单元格区域 (25)3 创建表 (25)4 排序表 (25)5 自动筛选 (25)第七章:数据透视表 (25)第八章:图表 (25)第九章:事件过程 (25)VBA是一种面向对象的程序设计语言,与Visual Basic程序设计语言在结构化和处理对象方面相同。
EXCEL学习笔记之VBA
EXCEL学习笔记之VBA1、变量如果给对象项变量赋值,必须用set关键词如Set sheet=Activesheet如果加上Option Explicit则变量必须先声明后使用2、设置函数为易失性函数,让自定义函数也能重新计算秩序在Function过程中添加一行代码即可.Application.Volatile True ‘将函数设置为易失性函数3、声明动态数组(1)可以用 Dim 数组名称() As 数据类型(2)可以使用Array创建数组,如Dim arr As Variantarr=Array(1,2,3,4);(3)可以使用SplitDim arr2 As Variantarr=Split(“叶枫”,“张三”);(4)数组常用运算UBound(数组名称);’数组的最大索引号LBound(数组名称);’数组的最小索引号(5)用Join函数将一位数组合并组合成字符串arr=Split(“叶枫”,“张三”);Txt=Join(arr,”,”); ‘第二个参数为分隔个元素的分隔符,如果省略,默认使用空格。
(6) 将数组中的数据写入单元格区域arr=Split(1,2,3,4,5,6);Range.(“a1:A6”).Value=Application.WorksheetFunction.tra snpose(arr)‘transpose函数为行列转置的作用,如果只有一行不需要使用,直接赋值arr即可。
4、在vba中直接使用工作表函数要加前缀Application.WorksheetFunction如:Application.WorksheetFunction.Sum(“a1:b2”);5、区域的选择(1)引用多个不连续的区域无论有多少区域,参数都只有一个字符串,参数中各个区域的地址用逗号分隔Range("A1:B2,c1:d2").Select(2)引用多个区域的公共区域可以将Range属性的参数设置为一个用空格分隔的多个单元格地址组成的字符串如:Range("B1:B10 A4:D6").Select(3)引用两个区域围成的矩形区域设置两个用逗号隔开的参数,就可以引用这两个区域围成的矩形区域,注意与第(1)中情况的区别Range("A1:B2”,”c1:d2").Select(4)使用cells属性引用单元格Range(Cells(1,1),Cells(10,5)).Select或者Range(“A1”,”E10”).Select(5)可以使用union合并多个单元格区域Application.Union(Range("A1:B2"), Range("c1:d2")).Select '同时选中两个区域(6)Worksheet对象的UsedRange和CurrentRegion属性UseRange属性返回的总是一个矩形区域,无论这些区域是否存在空行、空列。
EXCELVBA学习笔记
第一章VBA 基础知识1-2 宏在工作中的运用1.宏的定义宏:macro形容词:巨大的;大量的;宏观的名词:[电脑]巨(宏)指令定义:一组可以让自动执行的代码(VBA)宏的录制相当于摄像机的功能。
2.总结:优点:重复执行相同操作,提高工作效率缺点:不够智能化,无法交互工作,代码冗余解决方案:VBA3.宏在excel中的地位虽然看起来不够灵活,但对于学习VBA编程却非常重要。
1.提高代码编写效率2.帮助学习VBA知识1-4 代码编写规则代码换行(下划线+空格+换行)Sub aa()Msgbox _“学习VBA”End sub1-7 属性VBA属性:指对象所具有的特性人的属性:姓名、年龄、身份证号、住址……VBA对象属性的赋值Sub 属性赋值()=”改变自己”Sheet2.range(“a1”)=”学习VBA”End sub1-8 方法方法:实际上就是对对象的操作,它是一种动作,一种行为。
Sub 选择方法()Range("a1:a10").SelectEnd SubSub 复制方法()Sheets(1).Range("a1:a10") = 1Sheets(1).Range("a1:a10").Copy Sheets(2).Range("a1")End SubSub 删除方法()Sheets(3).DeleteEnd Sub1-9 常量与变量1.常量:常量是定义了之后就不做变化了。
常量定义格式:const 常量名=常量表达式2.变量:在定义之后还能再次赋值变量定义格式:dim 变量as 变量类型3.A.VBA允许使用未定义的变量,默认是变体变量(Variant)B.变量的强制声明:Option explicit4.变量名的命名规则以字母开头不能用保留字不超过255个字符同一范围内必须是唯一1-10 数据类型类型注释简写占用内存Integer 整型%2byteSingle 单精度!4byteDouble 双精度# 8byteLong 长整型& 4byteString 字符型$ 定长或变长Currency 货币型@ 8byte1-12 IF语句VBA中的IIF函数与工作表函数IF的语法结构一致Sub iif函数应用()Cells(2,3)=iif(cells(1,2)>80,”优秀”,”不优秀”)End sub1-12B1.单行形式1(if…then)If 条件判断then 条件成立结果注意:在单行形式中,按照if…then判断的结果也可以执行多条语句。
Excel中VBA编程学习笔记(九)
Excel中VBA编程学习笔记(九)1、获取工作表数量及选中、激活工作表Private Sub test()Dim count As Integercount = Worksheets.count '获取工作表数量Dim name As Stringname = Worksheets(1).name '获取第一个工作表名称Worksheets(count).Select '选中最后一个工作表Worksheets(Array('StudentAttendence','studentsScore')).Select '选中多张工作表,可以同时对这些工作表进行操作Worksheets('sheet1').Activate '激活表名为sheet1的工作表End Sub注:对于激活的工作表可以使用ActiveSheet表示。
选中的工作表与激活的工作表不同,选中的工作表可以有多个,但是激活的工作表只有一个。
一般点击工作表的标签时候就会激活该工作表。
2、删除批注【例1】删除工作表中的所有批注Private Sub test()Dim tmp As CommentFor Each tmp In mentstmp.DeleteNextEnd Sub【例2】删除选中区域的所有批注Sub test2()For Each rng In SelectionIf Not ment Is Nothing Thenrng.ClearCommentsEnd IfNextEnd Sub3、添加批注及批注属性设置Range.AddComment添加批注。
If Worksheets(1).Cells(1, 1).Comment Is Nothing Then '判断是否存在批注Worksheets(1).Cells(1, 1).AddComment '添加批注Worksheets(1).Cells(1, 1).Comment.Visible = True '设置批注可见Worksheets(1).Cells(1, 1).Comment.Text Text:='Hello'Worksheets(1).Cells(1, 1).Comment.Shape.AutoShapeType = 9 '设置为椭圆形End If注:批注中的text必须设置为字符串类型,否则不显示批注内容。
excelvba学习总结
excelvba学习总结【篇一:01-excel vba 学习总结 - 基础知识】excel vba 学习总结 - 基础知识1.什么是vba?当前辈们使用excel的时候,他们惊奇的发现:excel那是相当的彪悍,几乎任何的数据分析与处理,它都可以近乎完美(实际上不可能完美)完成。
但是在使用的过程中,他们也同样发现,有很多工作是要重复做的。
如果要想自动重复的完成这些工作,必须要借助其他的编程语言和工具。
微软为了简化这个过程,开发了一个通用的自动化语言,这个就是vba(visual basic for application)。
所有支持vba的应用程序都可以方便的自动化执行某些固定的步骤,除此以外,支持vba的应用程序之间也可以通过vba这个平台进行互操作。
由于这里讨论的是excel中的vba,所以我后面的总结内容都是以excel中的vba为主。
vba是vb的一个子集,它们之间有些地方是不同的:? vb程序可以独立的部署和运行,但是vba程序不能离开宿主程序运行。
vb程序是一个编译型的语言,程序需要编译后执行,而vba程序是解释执行的脚本语言。
?2.vba能做什么?知道了vba是什么东东后,那么它能干什么呢?确定的说,vba基本能做一切excel能做的事,比如打印,生成报表,分析数据,生成图表等,这是vba最大的优点。
不需要额外实现这些标准的功能,只需要简单的调用就可以了,excel已经做好了一切准备。
除了这个好处,vba其实还能处理很多的任务:? 自定义excel的外观,菜单,工具栏等。
重复执行自动化操作。
操作文件和文件夹访问数据库并执行相关操作访问网络操作xml获取系统信息操作和自动化office其它组件(支持vba的其他公司的产品也可以操作) ? ? ? ? ? ? ?除了上述的任务外,vba还有很多其它的功能有待发掘。
3. vba与macromacro是一组excel能理解并执行的命令集合。
excel vba笔记-14.10.07
Tips:chr(10) 换行符1. 常用指令Option Explicit .............................................. '强制对模块内所有变量进行声明On Error GoTo Line ....................................... '当错误发生时,会立刻转移到line 行去On Error Resume Next ................................. '当错误发生时,会立刻转移到发生错误的下一行去On Erro GoTo 0 ............................................. '当错误发生时,会立刻停止过程中任何错误处理过程Application.DisplayAlerts = False ................. 禁止显示提示和警告消息Application.DisplayAlerts = True .................. 显示提示和警告消息Application.ScreenUpdating = False ............ '关闭屏幕更新Application.ScreenUpdating = True ............. '打开屏幕更新Application.EnableEvents = False ................ 禁止事件发生Application.EnableEvents = True ................. 允许事件发生Option Base 1 ............................................... '指定数组的第一个下标为1Option Compare Text ................................... '字符串不区分大小写Application.Enable.CancelKey = xlDisabled . '禁用Ctrl+Break中止宏运行的功能Option Private Module ................................ '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示MsgBox ExecuteExcel4Macro("GET.DOCUMENT(50)") '查看打印所需页数2. 单元格2.1 单元格表示2.1.1 单一单元格表示Range ("A1") ................................................ A1单元格[A1] A1单元格Cells(2, 5) ..................................................... 第2行第5列单元格Cells(5, "A") .................................................. A5单元格2.1.2 多个单元格表示Range("A1,F5") ............................................ A1和F5单元格Range("A1", "F5") ........................................ A1到F5区域单元格Range("A1:F5") ............................................ A1到F5区域单元格Range("A1:A3", "C2:C4") ............................. A1到C4区域单元格Range(Cells(1, 1), Cells(4, 3)) ....................... A1到C4区域单元格[D2:F5] D2到F5区域单元格[D2,F5] D2和F5单元格Union(Range("A1:D4"), Range("E5:H8")) .... A1到D4与E5到H8区域单元格Range("A:A") ................................................ A列单元格Range("1:1") (1)Rows(2) (2)Rows("2:4") .................................................. 第2行到第4行Columns(2) ................................................... B列Columns("B:D") ............................................ B列到D列Range("B3").EntireColumn .......................... B列Range("B3").EntireRow (3)2.1.3 带参数单元格表示(设参数为a和b,a=5,b=2)Range("A" & a) ............................................. A a(A5)单元格Range("A2:A" & a) ....................................... A2到Aa(A5)单元格Range("A" & b, "A" & a) ............................... A b(A2)到Aa(A5)单元格Cells(5, a)...................................................... E5单元格2.1.4 单元格行数和列数Range("B5").Row ......................................... B5所在的行数(=5)Range("B5").Column .................................... B5所在的列数(=2)2.1.5 单元格偏移语法:expression.Offset(RowOffset, ColumnOffset)Range("A1").Offset(rowoffset:=2, columnoffset:=3) .... A1偏移2行3列(D3)Range("A1").Offset(2, 3) .............................. A1偏移2行3列(D3)2.1.6 单元格调整大小语法:expression.Resize(RowSize, ColumnSize)Range("A1").Resize(rowsize:=2, columnsize:=3)........... A1起始增至2行3列(A1到C3单元格)Range("A1").Resize(2, 3) .............................. A1起始增至2行3列(A1到C3单元格)2.1.7 单元格地址表示With Range("B2:I6")[C8] = .Address '结果为$B$2:$I$6[C9] = .Address(0, 0) '结果为B2:I6[C10] = .Address(1, 0) '结果为B$2:I$6[C11] = .Address(0, 1) '结果为$B2:$I6[C12] = .Address(1, 1) '结果为$B$2:$I$6End With2.1.8 单元格上级信息With Range("B1")[B3] = 'B3返回B1单元格所在工作表名称[B4] = 'B4返回B1单元格所在工作簿名称End With2.1.9 单元格删除语法:expression.Delete(Shift)Worksheets("Sheet1").Range("A1:D10").Delete Shift:= xlShiftToLeft'删除 Sheet1 的 A1:D10 单元格区域,并将其右侧单元格向左移位2.1.10 特殊单元格2.1.10.1最后一个单元格Cells(Rows.Count, 1).End(xlUp).Select '选定A列最后一个单元格Range("B65536").End(xlUp).Select '选定B列最后一个单元格Cells(1, Columns.Count).End(xlToLeft).Select'选定第1行最后一个单元格2.1.10.2特定单元格语法:expression.SpecialCells(Type, Value)2.1.11 单元格值的判断空值的判断If Range("A1") = "" Then '判断A1是否为空单元格If Len([A1]) = 0 Then '判断A1是否为空单元格If VBA.IsEmpty([A1]) Then '判断A1是否为空单元格数字的判断If VBA.IsNumeric([A2]) And [A2] <> "" Then '判断A2是否为数字If Application.WorksheetFunction.IsNumber([A2]) Then '判断A2是否为数字文本的判断If Application.WorksheetFunction.IsText([A3]) Then '判断A3是否为文本If VBA.TypeName([A3].Value) = "String" Then '判断A3是否为文本汉字的判断If [A4] > "z" Then '判断A4是否为汉字错误值的判断If VBA.IsError([A5]) Then '判断A5是否为错误值If Application.WorksheetFunction.IsError([A5]) Then '判断A5是否为错误值日期的判断If VBA.IsDate([A6]) Then '判断A6是否为日期合并单元格的判断Range("E2") = IsNull(Range("A1:D7").MergeCells) Then '判断A1:D7是否存在合并单元格2.2 单元格格式设置2.2.1 字体格式With Range("B2").Font '设置B2单元格的字体格式.Name = "华文彩云" '设置字体为华文彩云字体.FontStyle = "Bold Italic" '设置字体为粗体和斜体.Size = 18 '设置字体大小为18.Color = RGB(0, 255, 0) '设置字体为RGB中的(0, 255, 0).ColorIndex = 3 '设置字体颜色为调色板中的3号.Underline = 2 '设置字体带单下划线.Strikethrough = True '设置字体带删除线.Superscript = True '设置字体为上标字符.Subscript = False '设置字体不为下标字符End WithRange("A1").Font.Bold = True '设置A1字体为粗体Range("A1").Font.Italic = True '设置A1字体为斜体调色板中颜色的编号2.2.2 对齐格式2.2.2.1水平对齐语法:expression.HorizontalAlignment语法:expression.VerticalAlignment语法:expression.IndentLevel(可为 0 到15之间的整数值-输入小数会取整)With Range("D2").HorizontalAlignment = xlLeft '设置D2为左对齐.IndentLevel = 2 '设置D2缩进量为2End With2.2.2.4文字方向语法:expression.Orientation(可为–90 到90 度之间的整数值)Range("D2").Orientation = 30 '设置D2的文字方向为30度2.2.2.5阅读次序语法:expression .ReadingOrder2.2.2.6单元格缩小字体填充Range("B2").ShrinkToFit = True 'B2开启缩小字体填充2.2.2.7单元格自动换行Range("B2").WrapText = True 'B2开启自动换行2.2.2.8单元格合并Range("B2:C5").MergeCells = True 'B2:C5区域合并单元格Range("B2:C5").Merge 'B2:C5区域合并单元格Range("e1") = Range("b2").MergeArea.Address '返回单元格所在的合并单元格区域2.2.3 内部格式With Range("B2").Interior '设置B2单元格的内部格式.ColorIndex = 8 '设置边框内部颜色为调色板中的8号.Pattern = xlPatternCrissCross '设置单元格设置内部图案为十字图案.PatternColorIndex = 6 '设置边框内部图案的颜色为调色板中的6号End With设置ColorIndex和PatternColorIndex也可使用XlColorIndex常量2.2.4 边框格式语法:BorderAround(LineStyle, Weight, ColorIndex, Color)With Range("B2:D4").Borders '设置B2:D4区域的边框.LineStyle = xlDot '设置边框的线条样式为.Weight = xlMedium '设置边框的粗细为中等.ColorIndex = 5 '设置边框的颜色为调色板中的5号End WithRange("B2:D4").BorderAround xlContinuous, xlMedium, 5'设置B2:D4区域的外围边框为连续线,中等粗细,颜色为调色板中的5号2.3 单元格选择语法:expression.Goto(Reference, Scroll)Range("A1").Select '选中A1单元格Range("A1:B5").Activate '选定A1:B5区域Application.Goto Reference:=Range("A5"), scroll:=True'选定单元格 A5,并滚动工作表以显示该单元格2.4 单元格清除Range("A1").Clear '清除A1单元格(包括所有格式)Range("A1").ClearContents '清除A1单元格的数值Range("A1").ClearComments '清除A1单元格的批注Range("A1").ClearNotes '清除A1单元格的批注Range("A1").Comment.Delete '清除A1单元格的批注2.5 单元格输入2.5.1 单元格复制语法:expression.Copy(Destination)Range("A1").Copy '复制A1单元格Range("A1").Copy Destination:=Range("A2") 'A1复制到A2(包括所有格式)Range("A1").Copy Range("A2") 'A1复制到A2(带所有格式)2.5.2 单元格粘贴语法:expression.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)Range("A1").Copy '复制A1单元格Range("A4").PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationNone, Skipblanks:=True, Transpose:=True 'A1的数值复制到A4中,其他属性为默认值Range("A4").PasteSpecial xlPasteValues 'A1的值复制到A4中Range("A4").PasteSpecial(xlPasteValues) 'A1的值复制到A4中2.5.3 单元格的输入Range("A1").Value = Range("A4").Value 'A4的数值赋给A12.6 单元格查找2.6.1 Find、FindNext、FindPrevious语法:expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte,SerchFormat)expression.FindNext(After)expression.FindPrevious(After)每次使用Find方法后,参数LookIn、LookAt、SearchOrder 和MatchByte的设置将保存。