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函数返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集。