VBA函数(免费)
vba常用代码大全
前言我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个, 功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如: Application.WorksheetF unction .Sum(argl,arg2,arg3)o而能在VBA中直接应用的函数也有儿十个,下面将逐一详细介绍常用的40个VBA函数, 以供大家学习参考。
第1.1例ASC函数一、题目:要求编写一段代码,运行后得到字符串” Excel”的首字母和” e”的ASCII值。
二、代码:Sub 示例—1_01()Dim myNuml%, myNum2%myNuml 二Asc("Exce门’返回69myNum2 二Asc("e")'返回101[al]二"myNuml二n: [bl] = myNuml[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、S ub示例_1_010:宏程序的开始语句。
2、D im myNuml%, myNum2%:变量myNuml 和myNum2 声明为整型变量。
也可以写为Dim myNuml As Integer <> Integer变量存储为16位(2个字节)的数值形式,其范围为-32,768到32,767之间。
Integer的类型声明字符是白分比符号(%)。
3、m yNuml = Asc("Excel"):把Asc 函数的值赋给变量myNuml»Asc函数返回一个Integer,代表字符串中首字母的字符的ASCD代码。
语法Asc(string)必要的string (字符串)参数可以是任何有效的字符串表达式。
如果string中没有包含任何字符,则会产生运行时错误。
4、m yNum2 = Asc("e"):把Asc函数的值赋给变量myNum2。
VBA常用函数汇总及使用方法
VBA常用函数汇总及使用方法在Excel宏的编程过程中,VBA(Virtual Basic for Applications)是一门非常重要的编程语言。
作为VBA的一部分,函数在编写宏时发挥着重要的作用。
它们可以简化编程过程、提高效率,同时还可以处理和操作各种数据类型。
本文将为您介绍一些常用的VBA函数及其使用方法,帮助您更好地进行Excel宏的编程。
一、常用函数和使用方法1. Len函数Len函数用于返回字符串的长度。
在使用Len函数时,需要将待计算长度的字符串放入括号中,并将函数返回的值赋给一个变量。
示例代码:```Dim str as StringDim length as Integerstr = "Hello World"length = Len(str)MsgBox "字符串的长度为:" & length```2. Left函数和Right函数Left函数和Right函数分别用于返回字符串的左侧和右侧指定个数的字符。
这两个函数需要两个参数,第一个参数是待处理的字符串,第二个参数是要返回的字符数。
示例代码:```Dim str as StringDim leftStr as StringDim rightStr as Stringstr = "Hello World"leftStr = Left(str, 5)rightStr = Right(str, 5)MsgBox "左侧5个字符为:" & leftStrMsgBox "右侧5个字符为:" & rightStr```3. Mid函数Mid函数用于返回字符串中指定位置开始的指定字符数的字符串。
这个函数有三个参数,分别是待处理的字符串、开始位置和要返回的字符数。
示例代码:```Dim str as StringDim subStr as Stringstr = "Hello World"subStr = Mid(str, 7, 5)MsgBox "子字符串为:" & subStr```4. UCase函数和LCase函数UCase函数用于将字符串转换为大写,LCase函数用于将字符串转换为小写。
vba中常用的内置函数
vba中常用的内置函数VBA(Visual Basic for Applications)是一种用于Microsoft Office套件中的宏编程语言。
它允许用户通过编写脚本来自动化任务、处理数据和创建自定义功能。
在VBA中,有许多内置函数可用于执行各种常见任务。
本文将介绍一些常用的VBA内置函数,并提供示例和用法说明。
1. Len函数:用于计算字符串的长度。
它返回一个整数值,表示给定字符串中的字符数。
例如,Len("Hello World")将返回11,因为该字符串包含11个字符。
2. Left函数:用于从字符串的左侧提取指定数量的字符。
它接受两个参数:要提取的字符串和要提取的字符数。
例如,Left("Hello World", 5)将返回"Hello",因为它提取了字符串的前5个字符。
3. Right函数:与Left函数类似,但是从字符串的右侧提取指定数量的字符。
例如,Right("Hello World", 5)将返回"World",因为它提取了字符串的最后5个字符。
4. Mid函数:用于从字符串的任意位置提取指定数量的字符。
它接受三个参数:要提取的字符串、要从中提取字符的起始位置和要提取的字符数。
例如,Mid("Hello World", 7, 5)将返回"World",因为它从字符串的第7个字符开始提取了5个字符。
5. InStr函数:用于在字符串中查找子字符串的位置。
它接受三个参数:要搜索的字符串、要查找的子字符串和要开始搜索的位置。
它返回一个整数值,表示找到的子字符串的位置。
如果未找到子字符串,则返回0。
例如,InStr("Hello World", "World")将返回7,因为它在字符串中找到了子字符串"World"。
VBA函数大全(自己整理的)
VBA函数大全(自己整理的) Abs函数返回一个与参数类型相同的绝对值。
Array函数返回一个包含数组的Variant。
Asc函数返回一个整数,代表字符串中首字母的字符代码。
Atn函数返回一个双精度浮点数,指定一个数的反正切值。
CallByName函数执行一个对象的方法,或者设置或返回一个对象的属性。
Choose函数从参数列表中选择并返回一个值。
Chr函数返回一个字符串,其中包含与指定的字符代码相关的字符。
Cos函数返回一个双精度浮点数,指定一个角的余弦值。
___函数创建并返回一个对ActiveX对象的引用。
CurDir函数返回一个代表当前路径的字符串。
CVErr函数返回一个包含指定错误号的Error子类型的Variant。
Date函数返回一个包含系统日期的Variant(Date)。
DateAdd函数返回一个包含指定时间间隔后的日期的Variant(Date)。
DateDiff函数返回一个Variant(Long)的值,表示两个指定日期间的时间间隔数目。
DatePart函数返回一个包含已知日期的指定时间部分的Variant(Integer)。
DateSerial函数返回一个包含指定的年、月、日的Variant(Date)。
DateValue函数返回一个Variant(Date)。
Day函数返回一个表示一个月中某一日的1到31之间的整数。
DDB函数返回一个双精度浮点数,指定一笔资产在一特定期间内的折旧。
Dir函数返回一个符合指定模式、文件属性或磁盘卷标的文件名、目录名或文件夹名称的字符串。
DoEvents函数转让控制权,以便让操作系统处理其他事件。
Environ函数返回一个与操作系统环境变量相关的字符串。
在Macintosh中不可用。
EOF函数返回一个包含布尔值True的整数,表明已经到达为Random或顺序Input打开的文件的结尾。
Error函数返回对应于已知错误号的错误信息。
Exp函数返回一个双精度浮点数,指定e(自然对数的底)的某次方。
vba常用代码大全
前言我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。
而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA 函数,以供大家学习参考。
第1.1例 ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII 值。
二、代码:Sub 示例_1_01()Dim myNum1%, myNum2%myNum1 = Asc("Excel") '返回69myNum2 = Asc("e") '返回101[a1] = "myNum1= ": [b1] = myNum1[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、Sub 示例_1_01():宏程序的开始语句。
2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为 Dim myNum1 As Integer 。
Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。
Integer 的类型声明字符是百分比符号 (%)。
3、myNum1 = Asc("Excel"):把Asc函数的值赋给变量myNum1。
Asc函数返回一个 Integer,代表字符串中首字母的字符的ASCII代码。
语法Asc(string)必要的 string(字符串)参数可以是任何有效的字符串表达式。
如果 string 中没有包含任何字符,则会产生运行时错误。
4、myNum2 = Asc("e"):把Asc函数的值赋给变量myNum2。
VBA常用内部函数及其参数
VBA常用内部函数及其参数VBA (Visual Basic for Applications) 是一种用于在微软 Office应用程序中编写宏的编程语言。
在 VBA 中,有许多常用的内部函数可供使用,这些函数可以帮助开发人员更好地处理数据、字符串、日期等。
下面是一些常用的 VBA 内部函数及其参数的详细介绍。
1.数据类型处理函数:- CBool(expression):将表达式转换为布尔类型,返回 True 或False。
- CByte(expression):将表达式转换为 Byte 类型整数,取值范围为 0 到 255- CInt(expression):将表达式转换为整数类型,返回不大于表达式的最大整数。
- CLng(expression):将表达式转换为长整型,返回不大于表达式的最大长整数。
- CDbl(expression):将表达式转换为双精度浮点数,返回一个浮点数。
- CStr(expression):将表达式转换为字符串类型。
2.字符串处理函数:- Len(string):返回字符串的长度。
- Left(string, length):返回字符串左侧的指定长度的子字符串。
- Right(string, length):返回字符串右侧的指定长度的子字符串。
- Mid(string, start, length):返回字符串中指定起始位置和长度的子字符串。
3.数学函数:- Abs(number):返回给定数字的绝对值。
- Sqr(number):返回给定数字的平方根。
- Round(number, num_digits):将数字四舍五入到指定的位数。
- Int(number):返回小于或等于给定数字的最大整数。
- Fix(number):返回最接近零的整数。
- Randomize([number]):初始化随机数生成器。
- Rnd(:返回一个随机数,取值范围为 0 到 14.日期和时间函数:- Now(:返回当前的日期和时间。
常用VBA函数精选
常用VBA函数精选前言我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。
而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA函数,以供大家学习参考。
第1.1例ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII 值。
二、代码:Sub 示例_1_01()Dim myNum1%, myNum2%myNum1 = Asc("Excel") '返回69myNum2 = Asc("e") '返回101[a1] = "myNum1= ": [b1] = myNum1[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、Sub 示例_1_01():宏程序的开始语句。
2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为Dim myNum1 As Integer 。
Integer 变量存储为16位(2 个字节)的数值形式,其范围为-32,768 到32,767 之间。
Integer 的类型声明字符是百分比符号(%)。
3、myNum1 = Asc("Excel"):把Asc函数的值赋给变量myNum1。
Asc函数返回一个Integer,代表字符串中首字母的字符的ASCII代码。
语法Asc(string)必要的string(字符串)参数可以是任何有效的字符串表达式。
VBA代码全集模板
目录一、引用 (3)二、Worksheet_Change事件: (3)三、相乘 (5)四、相减 (6)五、高级筛选 (6)六、双击事件 (8)七.单位汇总(sumif),单条件汇总 (10)八、多条件汇总(连接、sumif) (13)九、多条件汇总、ado (15)十、对账 (16)十一、sql筛选 (20)十二、sql连接、交叉汇总 (21)十三、select语句总结 (23)十四、报表(有层次) (24)一、引用相对引用B4绝对引用$B$4混合引用$B4、B$4F4进行引用切换,$在字母前面则锁定列,在数字前面则锁定行。
二、Worksheet_Change 事件:1.在单元格中C4=VLOOKUP(B4,简码表!$B$4:$C$1000,2,FALSE)2. Worksheet_Change事件代码:Private Sub Worksheet_Change(ByVal Target As Range)On error resume nextIf Target.Row > 3 And Target.Column = 2 Theni = Target.RowCells(i, 3) = Application.WorksheetFunction.VLookup(Cells(i, 2), Sheets("简码表").Range("b4:c100"), 2, False)End IfEnd Sub备查代码:Private Sub Worksheet_Change(ByVal Target As Range)On Error Resume NextIf Target.Row > 3 And Target.Column = 5 Theni = Target.RowCells(i, 6) = Application.WorksheetFunction.VLookup(Cells(i, 5), Sheets("类款项").Range("b2:e2000"), 2, False)Cells(i, 7) = Application.WorksheetFunction.VLookup(Cells(i, 5), Sheets("类款项").Range("b2:e2000"), 3,False)Cells(i, 8) = Application.WorksheetFunction.VLookup(Cells(i, 5), Sheets("类款项").Range("b2:e2000"), 4, False)End IfEnd Sub三、相乘Sub 计算金额()Application.ScreenUpdating = FalseDim i As LongDim irow As Longirow = Range("a3").End(xldown).RowFor i = 4 To irowCells(i, 3) = Cells(i, 1) * Cells(i, 2)Next iApplication.ScreenUpdating = TrueEnd Sub四、相减Sub 相减()Application.ScreenUpdating = FalseRange("c3:c10000").ClearContentsDim i As LongDim irow As Longirow = Range("a5000").End(xlUp).RowFor i = 3 To irowCells(i, 3) = VBA.Round((Cells(i, 1) - Cells(i, 2)), 2)Next iApplication.ScreenUpdating = TrueEnd Sub五、高级筛选(工具-宏-录制新宏,宏名改成高级筛选)Sub 高级筛选()Sheets("业务").Range("A3:I10000").AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=ActiveCell.Range("A1:B1"), Unique:=TrueEnd Sub六、双击事件1.插入-名称-定义(修改名称和引用位置)2.查看代码-插入-用户窗体工具箱-多页、列表框-右键属性点击page1修改caption为资产类-点击空白列表框修改rowsource 为box1依次类推3. 业务表-查看代码 Worksheet beforedoubleclickPrivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Row > 3 And Target.Column = 6 ThenUserForm1.ShowSheets("初始化").Range("m3") = ActiveCellElseIf Target.Row > 3 And Target.Column = 7 ThenUserForm2.ShowEnd IfEnd Sub备查代码:Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Row > 3 And Target.Column = 6 ThenUserForm1.ShowSheets("初始化").Range("c2") = ActiveCellElseIf Target.Row > 3 And Target.Column = 7 ThenUserForm2.ShowSheets("初始化").Range("f2") = ActiveCellElseIf Target.Row > 3 And Target.Column = 8 ThenUserForm3.ShowEnd IfEnd Sub4.右键点击Userform1查看代码 Listbox1 dbclickPrivate Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox1.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox2.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox3.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox4_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox4.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox5_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox5.ListIndex, 0)Unload MeEnd Sub见上图5.插入用户窗体右键点击userform2 worksheet dblclickPrivate Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 7) = ListBox1.List(ListBox1.ListIndex, 0)Unload MeEnd SubUserform initializePrivate Sub UserForm_Initialize()Application.ScreenUpdating = FalseWith Sheets("初始化")Sheets("科目表").Range("h2:i10000").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=.Range("m2:m3"), CopyToRange:=.Range("n2"), Unique:=TrueEnd WithApplication.ScreenUpdating = TrueEnd Sub七.单位汇总(sumif),单条件汇总=SUMIF(业务!$D$4:$D$1000,单位汇总!$A15,业务!I$4:I$10000)Sub 单位汇总1()Application.ScreenUpdating = Falserange("a1:i10000").ClearCells(3, 2) = "指标数"Cells(3, 3) = "拨款数"Cells(3, 4) = "余额"Cells(1, 7) = "单位"Cells(3, 7) = "单位"Cells(3, 8) = "指标数"Cells(3, 9) = "拨款数"Sheets("业务").Range("D3:D10000").AdvancedFilter Action:=xlFilterCopy, _CopyToRange:=Range("A3"), Unique:=TrueSheets("业务").Range("A3:J10000").AdvancedFilter Action:=xlFilterCopy, _CriteriaRange:=Range("G1:G2"), CopyToRange:=Range("G3:I3"), Unique:=FalseDim i As LongDim irow As Longirow = Range("a3").End(xlDown).RowFor i = 4 To irowCells(i, 2) = Application.WorksheetFunction.SumIf(Range("g4:g10000"), Cells(i, 1), Range("h4:h10000"))Cells(i, 3) = Application.WorksheetFunction.SumIf(Range("g4:g10000"), Cells(i, 1), Range("i4:i10000"))Cells(i, 4) = VBA.Round(Cells(i, 2) - Cells(i, 3), 2)Next iRange("g1:i10000").ClearApplication.ScreenUpdating = TrueEnd Sub八、多条件汇总(连接、sumif)连接=k4&l4&m4&n4Vba:Sub 多条件汇总()Application.ScreenUpdating = FalseRange("a1:p10000").ClearSheets("业务").Range("D3:G10000").AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=Range("B3:E3"), Unique:=TrueSheets("业务").Range("D3:I10000").AdvancedFilter Action:=xlFilterCopy, _CopyToRange:=Range("K3:P3"), Unique:=FalseDim j As LongDim jrow As Longjrow = Range("k3").End(xlDown).RowFor j = 4 To jrowCells(j, 10) = Cells(j, 11) & Cells(j, 12) & Cells(j, 13) & Cells(j, 14)Next jDim i As LongDim irow As Longirow = Range("b3").End(xlDown).RowFor i = 4 To irowCells(3, 6) = "指标数"Cells(3, 7) = "拨款数"Cells(3, 8) = "余额"Cells(i, 1) = Cells(i, 2) & Cells(i, 3) & Cells(i, 4) & Cells(i, 5)Cells(i, 6) = Application.WorksheetFunction.SumIf(Range("j4:j10000"), Cells(i, 1), Range("o4:o10000"))Cells(i, 7) = Application.WorksheetFunction.SumIf(Range("j4:j10000"), Cells(i, 1), Range("p4:p10000"))Cells(i, 8) = VBA.Round(Cells(i, 6) - Cells(i, 7), 2)Next iRange("i3:p10000").ClearRange("a1:a10000").DeleteApplication.ScreenUpdating = TrueEnd Sub九、多条件汇总、adoSub 多条件汇总()Application.ScreenUpdating = FalseDim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类,款,项, sum(指标数) as 预算股指标,sum(拨款数) as 预算股拨款 from[业务$a3:J10000] where 归口='" & Range("h2").Value & "'and 月<=" & Range("i2").Value & " GROUP BY 单位,类,款,项"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("多条件汇总").Cells(3, i) = rst.Fields(i - 1).Name Next iSheets("多条件汇总").Range("a4").CopyFromRecordset rst rst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd Sub十、对账Sub 预算股()Application.ScreenUpdating = FalseDim i As IntegerDim strsql1 As StringDim cnn1 As New ADODB.ConnectionDim rst1 As New ADODB.Recordsetcnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql1 = " SELECT 单位,类,款,项, sum(指标数) as 预算股指标 from[预算股$a3:m50000] where 归口='" & Range("h2").Value & "'and 月<=" & Range("i2").Value & " GROUP BY 单位,类,款,项" rst1.Open strsql1, cnn1For i = 1 To rst1.Fields.CountSheets("对帐").Cells(3, i + 10) = rst1.Fields(i - 1).NameNext iSheets("对帐").Range("k4").CopyFromRecordset rst1rst1.Closecnn1.CloseSet rst1 = NothingSet cnn1 = NothingDim strsql2 As StringDim cnn2 As New ADODB.ConnectionDim rst2 As New ADODB.Recordsetcnn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql2 = " SELECT 单位,类,款,项, sum(指标数) as 专业股指标 from[专业股$a3:j50000] where 归口='" & Range("h2").Value & "'and 月<=" & Range("i2").Value & " GROUP BY 单位,类,款,项" rst2.Open strsql2, cnn2For i = 1 To rst2.Fields.CountSheets("对帐").Cells(3, i + 19) = rst2.Fields(i - 1).NameNext iSheets("对帐").Range("t4").CopyFromRecordset rst2rst2.Closecnn2.CloseSet rst2 = NothingSet cnn2 = Nothings = Application.WorksheetFunction.CountA(Range("k4:k10000")) + 4Range("T4:W10000").SelectSelection.CopyRange("K" & s).SelectActiveSheet.PasteRange("X4:X10000").SelectSelection.CopyRange("P" & s).SelectActiveSheet.PasteRange("X3").SelectSelection.CopyRange("P3").SelectActiveSheet.PasteDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类,款,项, sum(预算股指标) as 预算股指标 ,sum(专业股指标) as 专业股指标 from[对帐$k3:p50000] GROUP BY 单位,类,款,项"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("对帐").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("对帐").Range("a4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd Sub十一、sql筛选Sub 筛选()Application.ScreenUpdating = FalseDim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT distinct 单位,类,款,项 from[专业$a3:h10000]"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("筛选").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("筛选").Range("a4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = True End Sub十二、sql连接、交叉汇总Sub 连接()Application.ScreenUpdating = FalseDim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 股,月,归口,单位,类,款,项,指标数 from [专业$a3:h10000] union ALL SELECT 股,月,归口,单位,类,款,项,指标数 from [预算$a3:l10000] order by 股 desc"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("连接").Cells(1, i + 19) = rst.Fields(i - 1).NameNext iSheets("连接").Range("t2").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd SubSub 汇总()Application.ScreenUpdating = FalseCall 连接Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " transform sum(指标数) SELECT 单位,类,款,项 from [连接$t1:aa10000] where 归口= '" & Range("h2").Value & "' and 月=" & Range("i2").Value & " group by 单位,类,款,项 pivot 股" rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("连接").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("连接").Range("a4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingRange("t1:aa10000").ClearContentsApplication.ScreenUpdating = TrueEnd Sub十三、select语句总结1、筛选(false ---筛选全部)Select 列表名称1,列表名称2,…….列表名称n from [表$区域]或者Select * from [表$区域]2、筛选唯一的数据Select distinct 列表名称1,列表名称2,…….列表名称n from [表$区域]3、分类汇总Select 列表名称1,列表名称2,…….列表名称n,sum(a) as a from [表$区域]Group by列表名称1,列表名称2,…….列表名称n4、条件分类汇总Select 列表名称1,列表名称2,…….列表名称n,sum(a) as a from [表$区域]Where 归口=’”& range(“”).value &”’ and 月=”& range(“”).value &” Group by列表名称1,列表名称2,…….列表名称n5、交叉汇总Transform sum() select 列名称1,……列名称n from[表$区域] group by 列名称1,…..列名称n pivot 交叉事项6、连接Select 列名称1,…列名称n from[表$区域] union all Select 列名称1,…列名称n from[表$区域] order by 列名称 desc十四、报表(有层次)连接Transform sum(指标数),pivot 股按单位、类、款进行汇总按单位、类进行汇总按单位进行汇总连接以上四个表的内容,并按单位、类、款、项进行排序,其中单位按降序排序1、整体写代码Sub 报表()Application.ScreenUpdating = FalseDim i As IntegerDim strsql1 As StringDim cnn1 As New ADODB.ConnectionDim rst1 As New ADODB.Recordsetcnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql1 = " SELECT 股,月,归口,单位,类,款,项,sum(指标数) as 指标数 from[专业$a3:h10000] group by 股,月,归口,单位,类,款,项 union all SELECT 股,月,归口,单位,类,款,项,sum(指标数) as 指标数 from[预算$a3:l10000] group by 股,月,归口,单位,类,款,项 order by 股 desc"rst1.Open strsql1, cnn1For i = 1 To rst1.Fields.CountSheets("报表").Cells(3, i + 9) = rst1.Fields(i - 1).NameNext iSheets("报表").Range("j4").CopyFromRecordset rst1rst1.Closecnn1.CloseSet rst1 = NothingSet cnn1 = NothingDim strsql2 As StringDim cnn2 As New ADODB.ConnectionDim rst2 As New ADODB.Recordsetcnn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql2 = "transform sum(指标数) SELECT 单位,类,款,项 from[报表$j3:q10000] where 归口='" & Range("g2") _.Value & "' and 月<=" & Range("h2").Value & " group by 单位,类,款,项 order by 单位 desc pivot 股 "rst2.Open strsql2, cnn2For i = 1 To rst2.Fields.CountSheets("报表").Cells(3, i + 19) = rst2.Fields(i - 1).NameNext iSheets("报表").Range("t4").CopyFromRecordset rst2rst2.Closecnn2.CloseSet rst2 = NothingSet cnn2 = NothingDim strsql3 As StringDim cnn3 As New ADODB.ConnectionDim rst3 As New ADODB.Recordsetcnn3.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql3 = "SELECT 单位,类,款,sum(专业股) as 专业股,sum(预算股) as 预算股 from[报表$t3:y10000] group by 单位,类,款 order by 单位 desc"rst3.Open strsql3, cnn3For i = 1 To rst3.Fields.CountSheets("报表").Cells(3, i + 26) = rst3.Fields(i - 1).NameNext iSheets("报表").Range("aa4").CopyFromRecordset rst3rst3.Closecnn3.CloseSet rst3 = NothingSet cnn3 = NothingDim strsql4 As StringDim cnn4 As New ADODB.ConnectionDim rst4 As New ADODB.Recordsetcnn4.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql4 = "SELECT 单位,类,sum(专业股) as 专业股,sum(预算股) as 预算股 from[报表$t3:y10000] group by 单位,类 order by 单位 desc"rst4.Open strsql4, cnn4For i = 1 To rst4.Fields.CountSheets("报表").Cells(3, i + 32) = rst4.Fields(i - 1).NameNext iSheets("报表").Range("ag4").CopyFromRecordset rst4rst4.Closecnn4.CloseSet rst4 = NothingSet cnn4 = NothingDim strsql5 As StringDim cnn5 As New ADODB.ConnectionDim rst5 As New ADODB.Recordsetcnn5.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql5 = "SELECT 单位,sum(专业股) as 专业股,sum(预算股) as 预算股 from[报表$t3:y10000] group by 单位 order by 单位 desc"rst5.Open strsql5, cnn5For i = 1 To rst5.Fields.CountSheets("报表").Cells(3, i + 37) = rst5.Fields(i - 1).NameNext iSheets("报表").Range("al4").CopyFromRecordset rst5rst5.Closecnn5.CloseSet rst5 = NothingSet cnn5 = NothingColumns("AD:AD").SelectSelection.Insert Shift:=xlToRightRange("ad3") = "项"Columns("Aj:Ak").SelectSelection.Insert Shift:=xlToRightRange("aj3") = "款"Range("ak3") = "项"Columns("Ap:Ar").SelectSelection.Insert Shift:=xlToRightRange("ap3") = "类"Range("aq3") = "款"Range("ar3") = "项"Dim strsql6 As StringDim cnn6 As New ADODB.ConnectionDim rst6 As New ADODB.Recordsetcnn6.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql6 = " SELECT 单位,类,款,项,专业股,预算股 from [报表$t3:y10000] union all SELECT 单位,类,款,项,专业股,预算股 from [报表$aa3:af10000] union all SELECT 单位,类,款,项,专业股,预算股 from [报表$ah3:am10000] union all SELECT 单位,类,款,项,专业股,预算股 from [报表$ao3:at10000] order by 单位 desc,类,款,项 "rst6.Open strsql6, cnn6For i = 1 To rst6.Fields.CountSheets("报表").Cells(3, i) = rst6.Fields(i - 1).NameNext iSheets("报表").Range("a4").CopyFromRecordset rst6rst6.Closecnn6.CloseSet rst6 = NothingSet cnn6 = NothingRange("j1:au10000").ClearContentsDim p As LongDim prow As Longprow = Range("a3").End(xlDown).RowFor p = 4 To prowRange("g3") = "金额"Cells(p, 7) = VBA.Round(Cells(p, 6) - Cells(p, 5), 2)Next pApplication.ScreenUpdating = TrueEnd Sub2、分开写代码:Sub 连接()Application.ScreenUpdating = FalseDim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 月,归口,股,单位,类,款,项,sum(指标数) as 指标数 from[专业$a3:h10000] group by 月,归口,股,单位,类,款,项 union all SELECT 月, 归口,股,单位,类,款,项,sum(指标数) as 指标数 from[预算$a3:l10000] group by 月, 归口,股,单位,类,款,项 order by 股 desc"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 9) = rst.Fields(i - 1).NameNext iSheets("报表").Range("j4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd SubSub 项()Application.ScreenUpdating = FalseCall 连接Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';DataSource=" & ThisWorkbook.FullNamestrsql = "transform sum(指标数) SELECT 单位,类,款,项 from [报表$j3:q10000] where 归口= '" & Range("g2").Value & "' and 月<=" & Range("h2").Value & " group by 单位,类,款,项 pivot 股"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 19) = rst.Fields(i - 1).NameNext iSheets("报表").Range("t4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd SubSub 款()Application.ScreenUpdating = FalseCall 项Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类,款, sum(专业股) as 专业股, sum(预算股) as 预算股 from [报表$t3:y10000] group by 单位,类,款 "rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 26) = rst.Fields(i - 1).NameNext iSheets("报表").Range("aa4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingColumns("AD:AD").SelectSelection.Insert Shift:=xlToRightCells(3, 30) = "项"Application.ScreenUpdating = TrueEnd SubSub 类()Application.ScreenUpdating = FalseCall 款Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类, sum(专业股) as 专业股, sum(预算股) as 预算股 from [报表$aa3:af10000] group by 单位,类 "rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 33) = rst.Fields(i - 1).NameNext iSheets("报表").Range("ah4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingColumns("AJ:AJ").SelectSelection.Insert Shift:=xlToRightColumns("AK:AK").SelectSelection.Insert Shift:=xlToRightRange("AJ3").SelectActiveCell.FormulaR1C1 = "款"Range("AK3").SelectActiveCell.FormulaR1C1 = "项"Application.ScreenUpdating = TrueEnd SubSub 单位()Application.ScreenUpdating = FalseCall 类Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位, sum(专业股) as 专业股, sum(预算股) as 预算股 from [报表$ah3:am10000] group by 单位 "rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 40) = rst.Fields(i - 1).NameNext iSheets("报表").Range("ao4").CopyFromRecordset rstrst.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = True Columns("AP:AP").SelectSelection.Insert Shift:=xlToRight Columns("AQ:AQ").SelectSelection.Insert Shift:=xlToRight Columns("AR:AR").SelectSelection.Insert Shift:=xlToRight Range("AP3").SelectActiveCell.FormulaR1C1 = "类"Range("AQ3").SelectActiveCell.FormulaR1C1 = "款"Range("AR3").SelectActiveCell.FormulaR1C1 = "项" End SubSub 报表()If Range("i2") = "类" ThenCall 类ElseIf Range("i2") = "款" ThenCall 款ElseCall 项End IfEnd SubSub 总报表()Application.ScreenUpdating = FalseDim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类,款,项,专业股,预算股 from [报表$t3:y10000] union all SELECT 单位,类,款,项,专业股,预算股 from [报表$aa3:af10000] union all SELECT 单位,类,款,项,专业股,预算股 from [报表$ah3:am10000] union all SELECT 单位,类,款,项,专业股,预算股 from [报表$ao3:at10000] order by 单位 desc,类,款,项 "rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("报表").Range("a4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingRange("j1:br10000").ClearApplication.ScreenUpdating = TrueEnd Sub插入图片Sub 按钮48_单击() 宏按钮名,编码时自动生成On Error Resume NextDim MR As RangeFor Each MR In SelectionIf Not IsEmpty(MR) ThenMR.SelectML = MR.LeftMT = MR.TopMW = MR.WidthMH = MR.HeightActiveSheet.Shapes.AddShape(msoShapeRectangle, ML, MT, MW, MH).SelecterPicture _End IfNextEnd Sub与EXCEL表在同一个文件夹里,。
VBA自定义函数大全
VBA自定义函数大全目录001.返回 Column 英文字002.查询某一值第 num 次出现的值003.返回当个人工资薪金所得为2000 元(起征点为850元)时的应纳个人所得税税额004.从形如“123545ABCDE”的字符串中取出数字005.从形如“ABCD12455EDF”的字符串中取出数字006.按 SplitType 取得 RangeName 串值中的起始位置007.将金额数字转成中文大写008.计算某种税金009.人民币大、小写转换010.查汉字区位码011.把公元年转为农历012.返回指定列数的列标013.用指定字符替换某字符014.从右边开始查找指定字符在字符串中的位置015.从右边开始查找指定字符在字符串中的位置016.计算工龄017.计算日期差,除去星期六、星期日018.将英文字反转的自定函数019.计算个人所得税020.一个能计算是否有重复单元的函数021.数字金额转中文大写022.将数字转成英文023.人民币大小写转换024.获取区域颜色值025.获取活动工作表名026.获取最后一行行数027.判断是否连接在线028.币种转换029.检验工作表是否有可打印内容030.查找一字符串(withinstr)在另一字符串中(findstr1)中某一次(startnum)出现时的位置,返回零表示没找到031.增加文件路径最后的“\”符号032.计算所得税033.从工作表第一行的标题文字以数字形式返回所在号034.在多个工作表中查找一个范围内符合某个指定条件的项目对应指定范围加总求和035.返回 Column 英文字036.查找指定列名的列数037.文字格式的时间(分:秒)转化为数字格式(秒)038.将(hh:mm:ss)格式的时分秒数转换成秒数039.金额中文大写转数字040.把角度转为度秒分、弧度等显示041.身份证号码侦测042.显示公式043.方便财务人员理帐查找044.数值转换为字符地址045.字符地址转换为数值046.等待时间(以秒计算)047.得到字符串实际的长度(以单字节记)048.18 位身份证最后一位有效性验证049.计算符合 maturity condition 的拆解金额050.对多个用同一分隔符分隔的待查找元素,逐一在表区域首列内搜索,将返回选定单元格的值相加051.根据个人所得税(工资)反算工资数052.判断表是否存在053.角度转弧054.比较相同的字符串055.对选定的数组进行排序056.取得指定月份天数057.排序工作表活页薄058.统计数组中非重复数据个数059.摘取子字符串060.计算 20000 余个汉字的笔画061.删除当前工作表中的全部超连接062.取得相近数据063.提取定串中汉字064.搜索重复数据(选定范围)065.字符型转数字型066.小写人民币转大写人民币067.取得指定月份人星期天个数068.侦测档案是否包含宏069.获取循环参照单元格070.创建桌面快捷方式071.自动建立多级目录072.统计经筛选后符合条件的记录条数073.复制单元格列高与栏宽074.取消隐藏工作表(包括 vba Project 工程保护的)075.删除单元格自定义名称076.从文件路径中取得文件名077.取得一个文件的扩展名078.取得一个文件的路径079.十进制转二进制080.检查一个数组是否为空081.字母栏名转数字栏名082.数字栏名转文字栏名083.判断一件活页夹中是否还有子目录084.判断一个文件是否在使用中085.列出档案详细摘要信息086.获取菜单 ID 编号及名称列表087.状态列动态显示文字088.取得一个文件的路径2089.取得一个文件的路径3090.取得 Activecell 的栏名091.取得单元格中指定字符前的字符092.前单元格指定字符前的字符颜色改成红色093.根据数字返回对应的字母列号094.取工作表名字095.取消所有隐藏的宏表096.导出 VBA Project 代码097.导入 VBA Project 代码098.取得汉字拼音的第一个字母099.获取两栏中相同的数据100.选取当前工作表中公式出错的单元格,关返回出错个数101.将工作表中最后一列作为页脚打印在每一面页尾102.获取 vbproject 引用项目103.移除 Excel 工作表中的外部数据连接104.将选择定单元格作成镜像图片105.反选择单元格中的数106.在 Excel 中加入一个量度尺(以厘米为单位)107.在 Excel 中加入一个量度尺(以寸为单位)108.取得一个短文件名的长文件名109.取得临时文件名110.等用 Shell 调用的程序执行完成后再执行其它程序111.将 Mouse 显示成动画112.限制 Mouse 移动范围113.取得当前激活窗品句柄及标题114.取得屏幕分辨率115.自动建立多级目录116.将文件长度置零117.读取 WIN9X / Me 共享文件夹密码118.取得预设的打印机及设置预设的打印机119.获得当前操作系统的打印机个数及检测打印是否存在120.枚举打印机名称清单121.读取网络服务器当前时间122.下载文件到指定目录123.自动映射网络驱动器124.自动断开网络驱动器125.连接选定单元格中的内容126.获取一个单元格中有指定字体颜色部份数据127.对指定文件加 XLS 加密128.选择指定范围内使用了填充颜色的单元格129.在特定的区域内查找文本,返回值是包含查找文本的单元格130.返回特定区域中最大值的地址131.删除表格中使用范围内的所有空白单元格132.返回数组中有多少个指定的字符串133.返回当前工作表中引用了指定的单元的地址134.获取 Excel 中字型列表135.获取一个字符串中有多少个数字字符136.在 Excel 中对多列进行填充137.对选定的范围进行数据填充(忽略单元格格式)138.VBA Project 加密及解密139.列出收藏夹中的网址140.计算两个日期之间相隔的年份,比如年龄,工龄等,可计算从1000年01月01日起的日期141.从字符串提取纯数字142.将一个数组按升序排列143.将一个数组按降序排列144.删除空白列145.判断工作表是否为空白146.将数据按类分到不同工作薄147.单元格内数据排序148.对多栏排序149.返回计算公式的值[值的计算公式]150.把第一列=某个值对应的第二列的内容连在一起,并用、隔开151.取得系统使用模式152.计算机注销/关机/重启153.更改计算机名称154.从 n 位开始取出字符串中的汉字、英文字母、数字155.在指定列中寻找含有指定字符串的单元格,并将符合条件的单元格标为红色,并将对应的下一列单元格赋值为1156.清除字符串中的空格157.查找合并单元格位置158.阴阳历转换和阴阳历生日159.利用数组和 Substitute 来替换某字符160.一键创建斜线表头161.函自动获取指定月的工作日。
VBA代码全集
VBA代码全集VBA代码全集一、引用相对引用B4绝对引用$B$4混合引用$B4、B$4F4进行引用切换,$在字母前面则锁定列,在数字前面则锁定行。
二、Worksheet_Change 事件:1.在单元格中C4=VLOOKUP(B4,简码表!$B$4:$C$1000,2,FALSE)2. Worksheet_Change事件代码:Private Sub Worksheet_Change(ByVal Target As Range)On error resume nextIf Target.Row > 3 And Target.Column = 2 Theni = Target.RowCells(i, 3) = Application.WorksheetFunction.VLookup(Cells(i, 2), Sheets("简码表").Range("b4:c100"), 2, False)End IfEnd Sub备查代码:Private Sub Worksheet_Change(ByVal Target As Range)On Error Resume NextIf Target.Row > 3 And Target.Column = 5 Theni = Target.RowCells(i, 6) = Application.WorksheetFunction.VLookup(Cells(i, 5), Sheets("类款项").Range("b2:e2000"), 2, False)Cells(i, 7) = Application.WorksheetFunction.VLookup(Cells(i, 5), Sheets("类款项").Range("b2:e2000"), 3, False)Cells(i, 8) = Application.WorksheetFunction.VLookup(Cells(i, 5), Sheets("类款项").Range("b2:e2000"), 4, False)End IfEnd Sub三、相乘Sub 计算金额()Application.ScreenUpdating = FalseDim i As LongDim irow As Longirow = Range("a3").End(xldown).RowFor i = 4 To irowCells(i, 3) = Cells(i, 1) * Cells(i, 2)Next iApplication.ScreenUpdating = TrueEnd Sub四、相减Sub 相减()Application.ScreenUpdating = FalseRange("c3:c10000").ClearContentsDim i As LongDim irow As Longirow = Range("a5000").End(xlUp).RowFor i = 3 To irowCells(i, 3) = VBA.Round((Cells(i, 1) - Cells(i, 2)), 2) Next iApplication.ScreenUpdating = TrueEnd Sub五、高级筛选(工具-宏-录制新宏,宏名改成高级筛选)Sub 高级筛选()Sheets("业务").Range("A3:I10000").AdvancedFilterAction:=xlFilterCopy, _CopyToRange:=ActiveCell.Range("A1:B1"), Unique:=TrueEnd Sub六、双击事件1.插入-名称-定义(修改名称和引用位置)2.查看代码-插入-用户窗体工具箱-多页、列表框-右键属性点击page1修改caption为资产类-点击空白列表框修改rowsource 为box1依次类推3. 业务表-查看代码 Worksheet beforedoubleclickPrivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Target.Row > 3 And Target.Column = 6 Then UserForm1.ShowSheets("初始化").Range("m3") = ActiveCellElseIf Target.Row > 3 And Target.Column = 7 ThenUserForm2.ShowEnd IfEnd Sub备查代码:Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Target.Row > 3 And Target.Column = 6 Then UserForm1.ShowSheets("初始化").Range("c2") = ActiveCellElseIf Target.Row > 3 And Target.Column = 7 ThenUserForm2.ShowSheets("初始化").Range("f2") = ActiveCellElseIf Target.Row > 3 And Target.Column = 8 ThenUserForm3.ShowEnd IfEnd Sub4.右键点击Userform1查看代码 Listbox1 dbclickPrivate Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox1.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox2.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox3.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox4_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox4.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox5_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox5.ListIndex, 0)Unload MeEnd Sub见上图5.插入用户窗体右键点击userform2 worksheet dblclickPrivate Sub ListBox1_DblClick(ByVal Cancel AsMSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 7) = ListBox1.List(ListBox1.ListIndex, 0)Unload MeEnd SubUserform initializePrivate Sub UserForm_Initialize()Application.ScreenUpdating = FalseWith Sheets("初始化")Sheets("科目表").Range("h2:i10000").AdvancedFilterAction:=xlFilterCopy, _CriteriaRange:=.Range("m2:m3"), CopyToRange:=.Range("n2"), Unique:=TrueEnd WithEnd Sub七.单位汇总(sumif),单条件汇总=SUMIF(业务!$D$4:$D$1000,单位汇总!$A15,业务!I$4:I$10000)Sub 单位汇总1()Application.ScreenUpdating = Falserange("a1:i10000").ClearCells(3, 2) = "指标数"Cells(3, 3) = "拨款数"Cells(3, 4) = "余额"Cells(1, 7) = "单位"Cells(3, 7) = "单位"Cells(3, 8) = "指标数"Cells(3, 9) = "拨款数"Sheets("业务").Range("D3:D10000").AdvancedFilterAction:=xlFilterCopy, _CopyToRange:=Range("A3"), Unique:=TrueSheets("业务").Range("A3:J10000").AdvancedFilterAction:=xlFilterCopy, _CriteriaRange:=Range("G1:G2"), CopyToRange:=Range("G3:I3"), Unique:=False Dim i As LongDim irow As Longirow = Range("a3").End(xlDown).RowFor i = 4 To irowCells(i, 2) = Application.WorksheetFunction.SumIf(Range("g4:g10000"), Cells(i, 1), Range("h4:h10000"))Cells(i, 3) = Application.WorksheetFunction.SumIf(Range("g4:g10000"), Cells(i, 1), Range("i4:i10000"))Cells(i, 4) = VBA.Round(Cells(i, 2) - Cells(i, 3), 2)Next iRange("g1:i10000").ClearApplication.ScreenUpdating = TrueEnd Sub八、多条件汇总(连接、sumif)连接=k4&l4&m4&n4Vba:Sub 多条件汇总()Application.ScreenUpdating = FalseRange("a1:p10000").ClearSheets("业务").Range("D3:G10000").AdvancedFilterAction:=xlFilterCopy, _CopyToRange:=Range("B3:E3"), Unique:=True Sheets("业务").Range("D3:I10000").AdvancedFilterAction:=xlFilterCopy, _CopyToRange:=Range("K3:P3"), Unique:=False Dim j As LongDim jrow As Longjrow = Range("k3").End(xlDown).RowFor j = 4 To jrowCells(j, 10) = Cells(j, 11) & Cells(j, 12) & Cells(j, 13) & Cells(j, 14)Next jDim i As LongDim irow As Longirow = Range("b3").End(xlDown).RowFor i = 4 To irowCells(3, 6) = "指标数"Cells(3, 7) = "拨款数"Cells(3, 8) = "余额"Cells(i, 1) = Cells(i, 2) & Cells(i, 3) & Cells(i, 4) & Cells(i, 5)Cells(i, 6) = Application.WorksheetFunction.SumIf(Range("j4:j10000"), Cells(i, 1), Range("o4:o10000"))Cells(i, 7) = Application.WorksheetFunction.SumIf(Range("j4:j10000"), Cells(i, 1), Range("p4:p10000"))Cells(i, 8) = VBA.Round(Cells(i, 6) - Cells(i, 7), 2)Next iRange("i3:p10000").ClearRange("a1:a10000").Delete Application.ScreenUpdating = True End Sub九、多条件汇总、adoSub 多条件汇总()Application.ScreenUpdating = False Dim i As IntegerDim strsql As StringDim cnn As New ADODB.Connection Dim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类,款,项, sum(指标数) as 预算股指标,sum(拨款数) as 预算股拨款 from[业务$a3:J10000] where 归口='" & Range("h2").Value & "'and 月<=" & Range("i2").Value & " GROUP BY 单位,类,款,项"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("多条件汇总").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("多条件汇总").Range("a4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingEnd Sub 十、对账Sub 预算股()Application.ScreenUpdating = FalseDim i As IntegerDim strsql1 As StringDim cnn1 As New ADODB.ConnectionDim rst1 As New ADODB.Recordsetcnn1.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql1 = " SELECT 单位,类,款,项, sum(指标数) as 预算股指标 from[预算股$a3:m50000] where 归口='" & Range("h2").Value & "'and 月<=" & Range("i2").Value & " GROUP BY 单位,类,款,项" rst1.Open strsql1, cnn1For i = 1 To rst1.Fields.CountSheets("对帐").Cells(3, i + 10) = rst1.Fields(i - 1).NameNext iSheets("对帐").Range("k4").CopyFromRecordset rst1rst1.Closecnn1.CloseSet rst1 = NothingSet cnn1 = NothingDim strsql2 As StringDim cnn2 As New ADODB.ConnectionDim rst2 As New ADODB.Recordsetcnn2.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql2 = " SELECT 单位,类,款,项, sum(指标数) as 专业股指标 from[专业股$a3:j50000] where 归口='" & Range("h2").Value & "'and 月<=" & Range("i2").Value & " GROUP BY 单位,类,款,项"rst2.Open strsql2, cnn2For i = 1 To rst2.Fields.CountSheets("对帐").Cells(3, i + 19) = rst2.Fields(i - 1).NameNext iSheets("对帐").Range("t4").CopyFromRecordset rst2rst2.Closecnn2.CloseSet rst2 = NothingSet cnn2 = Nothings = Application.WorksheetFunction.CountA(Range("k4 :k10000")) + 4Range("T4:W10000").SelectSelection.CopyRange("K" & s).SelectActiveSheet.PasteRange("X4:X10000").SelectSelection.CopyRange("P" & s).SelectActiveSheet.PasteRange("X3").SelectSelection.CopyRange("P3").SelectActiveSheet.PasteDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类,款,项, sum(预算股指标) as 预算股指标 ,sum(专业股指标) as 专业股指标from[对帐$k3:p50000] GROUP BY 单位,类,款,项" rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("对帐").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("对帐").Range("a4").CopyFromRecordsetrstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = True End Sub十一、sql筛选Sub 筛选()Application.ScreenUpdating = False Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT distinct 单位,类,款,项 from[专业$a3:h10000]"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("筛选").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("筛选").Range("a4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd Sub十二、sql连接、交叉汇总Sub 连接()Application.ScreenUpdating = FalseDim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 股,月,归口,单位,类,款,项,指标数 from [专业$a3:h10000] union ALL SELECT 股,月,归口,单位,类,款,项,指标数from [预算$a3:l10000] order by 股 desc"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("连接").Cells(1, i + 19) = rst.Fields(i - 1).NameNext iSheets("连接").Range("t2").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd SubSub 汇总()Application.ScreenUpdating = FalseCall 连接Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " transform sum(指标数) SELECT 单位,类,款,项 from [连接$t1:aa10000] where 归口= '" & Range("h2").Value & "' and 月=" & Range("i2").Value & " group by 单位,类,款,项pivot 股"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("连接").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("连接").Range("a4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingEnd Sub十三、select语句总结1、筛选(false ---筛选全部)Select 列表名称1,列表名称2,…….列表名称n from [表$区域]或者Select * from [表$区域]2、筛选唯一的数据Select distinct 列表名称1,列表名称2,…….列表名称n from [表$区域]3、分类汇总Select 列表名称1,列表名称2,…….列表名称n,sum(a) as a from [表$区域]Group by列表名称1,列表名称2,…….列表名称n4、条件分类汇总Select 列表名称1,列表名称2,…….列表名称n,sum(a) as a from [表$区域]Where 归口=’”& range(“”).value &”’ and 月=”& range(“”).value &” Group by列表名称1,列表名称2,…….列表名称n5、交叉汇总Transform sum() select 列名称1,……列名称n from[表$区域] group by 列名称1,…..列名称n pivot 交叉事项6、连接Select 列名称1表$区域] unionall Select 列名称1n from[表$区域] order by 列名称 desc十四、报表(有层次)连接Transform sum(指标数),pivot 股按单位、类、款进行汇总按单位、类进行汇总按单位进行汇总连接以上四个表的内容,并按单位、类、款、项进行排序,其中单位按降序排序1、整体写代码Sub 报表()Application.ScreenUpdating = FalseDim i As IntegerDim strsql1 As StringDim cnn1 As New ADODB.ConnectionDim rst1 As New ADODB.Recordsetcnn1.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql1 = " SELECT 股,月,归口,单位,类,款,项,sum(指标数) as 指标数 from[专业$a3:h10000] group by 股,月,归口,单位,类,款,项 union all SELECT 股,月,归口,单位,类,款,项,sum(指标数) as 指标数 from[预算$a3:l10000] group by 股,月,归口,单位,类,款,项 order by 股 desc"rst1.Open strsql1, cnn1For i = 1 To rst1.Fields.CountSheets("报表").Cells(3, i + 9) = rst1.Fields(i - 1).NameNext iSheets("报表").Range("j4").CopyFromRecordset rst1rst1.Closecnn1.CloseSet rst1 = NothingSet cnn1 = NothingDim strsql2 As StringDim cnn2 As New ADODB.ConnectionDim rst2 As New ADODB.Recordsetcnn2.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql2 = "transform sum(指标数) SELECT 单位,类,款,项 from[报表$j3:q10000] where 归口='" & Range("g2") _.Value & "' and 月<=" & Range("h2").Value & "group by 单位,类,款,项 order by 单位 desc pivot 股 "rst2.Open strsql2, cnn2For i = 1 To rst2.Fields.CountSheets("报表").Cells(3, i + 19) = rst2.Fields(i - 1).NameNext iSheets("报表").Range("t4").CopyFromRecordset rst2rst2.Closecnn2.CloseSet rst2 = NothingSet cnn2 = NothingDim strsql3 As StringDim cnn3 As New ADODB.ConnectionDim rst3 As New ADODB.Recordsetcnn3.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql3 = "SELECT 单位,类,款,sum(专业股) as 专业股,sum(预算股) as 预算股 from[报表$t3:y10000] group by 单位,类,款 order by 单位 desc"rst3.Open strsql3, cnn3For i = 1 To rst3.Fields.CountSheets("报表").Cells(3, i + 26) = rst3.Fields(i - 1).NameNext iSheets("报表").Range("aa4").CopyFromRecordset rst3rst3.Closecnn3.CloseSet rst3 = NothingSet cnn3 = NothingDim strsql4 As StringDim cnn4 As New ADODB.ConnectionDim rst4 As New ADODB.Recordsetcnn4.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql4 = "SELECT 单位,类,sum(专业股) as 专业group by 单位,类 order by 单位 desc"rst4.Open strsql4, cnn4For i = 1 To rst4.Fields.CountSheets("报表").Cells(3, i + 32) = rst4.Fields(i - 1).NameNext iSheets("报表").Range("ag4").CopyFromRecordset rst4rst4.Closecnn4.CloseSet rst4 = NothingSet cnn4 = NothingDim strsql5 As StringDim cnn5 As New ADODB.ConnectionDim rst5 As New ADODB.Recordsetcnn5.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql5 = "SELECT 单位,sum(专业股) as 专业group by 单位 order by 单位 desc"rst5.Open strsql5, cnn5For i = 1 To rst5.Fields.CountSheets("报表").Cells(3, i + 37) = rst5.Fields(i - 1).NameNext iSheets("报表").Range("al4").CopyFromRecordset rst5rst5.Closecnn5.CloseSet rst5 = NothingSet cnn5 = NothingColumns("AD:AD").SelectSelection.Insert Shift:=xlToRightRange("ad3") = "项"Columns("Aj:Ak").SelectSelection.Insert Shift:=xlToRightRange("aj3") = "款"Range("ak3") = "项"Columns("Ap:Ar").SelectSelection.Insert Shift:=xlToRightRange("ap3") = "类"Range("aq3") = "款"Range("ar3") = "项"Dim strsql6 As StringDim cnn6 As New ADODB.ConnectionDim rst6 As New ADODB.Recordsetcnn6.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql6 = " SELECT 单位,类,款,项,专业股,预算股from [报表$t3:y10000] union all SELECT 单位,类,款,项,专业股,预算股 from [报表$aa3:af10000] union all SELECT 单位,类,款,项,专业股,预算股from [报表$ah3:am10000] union all SELECT 单位,类,款,项,专业股,预算股 from [报表$ao3:at10000] order by 单位 desc,类,款,项 "rst6.Open strsql6, cnn6For i = 1 To rst6.Fields.CountSheets("报表").Cells(3, i) = rst6.Fields(i - 1).NameNext iSheets("报表").Range("a4").CopyFromRecordset rst6rst6.Closecnn6.CloseSet rst6 = NothingSet cnn6 = NothingRange("j1:au10000").ClearContentsDim p As LongDim prow As Longprow = Range("a3").End(xlDown).RowFor p = 4 To prowRange("g3") = "金额"Cells(p, 7) = VBA.Round(Cells(p, 6) - Cells(p, 5), 2)Next pApplication.ScreenUpdating = TrueEnd Sub2、分开写代码:Sub 连接()Application.ScreenUpdating = FalseDim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 月,归口,股,单位,类,款,项,sum(指标数) as 指标数 from[专业$a3:h10000] group by 月,归口,股,单位,类,款,项 union all SELECT 月, 归口,股,单位,类,款,项,sum(指标数) as 指标数 from[预算$a3:l10000] group by 月, 归口,股,单位,类,款,项 order by 股 desc"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 9) = rst.Fields(i - 1).NameNext iSheets("报表").Range("j4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd SubSub 项()Application.ScreenUpdating = FalseCall 连接Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = "transform sum(指标数) SELECT 单位,类,款,项 from [报表$j3:q10000] where 归口= '" &Range("g2").Value & "' and 月<=" & Range("h2").Value & " group by 单位,类,款,项pivot 股"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 19) = rst.Fields(i - 1).NameNext iSheets("报表").Range("t4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd SubSub 款()Application.ScreenUpdating = FalseCall 项Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类,款, sum(专业股) as 专业股, sum(预算股) as 预算股from [报表$t3:y10000] group by 单位,类,款 "rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 26) = rst.Fields(i - 1).NameNext iSheets("报表").Range("aa4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingColumns("AD:AD").SelectSelection.Insert Shift:=xlToRightCells(3, 30) = "项"Application.ScreenUpdating = TrueEnd SubSub 类()Application.ScreenUpdating = FalseCall 款Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类, sum(专业股) as 专业股, sum(预算股) as 预算股from [报表$aa3:af10000] group by 单位,类 "rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 33) = rst.Fields(i - 1).NameNext iSheets("报表").Range("ah4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingColumns("AJ:AJ").SelectSelection.Insert Shift:=xlToRightColumns("AK:AK").SelectSelection.Insert Shift:=xlToRightRange("AJ3").SelectActiveCell.FormulaR1C1 = "款"Range("AK3").SelectActiveCell.FormulaR1C1 = "项"Application.ScreenUpdating = TrueEnd SubSub 单位()Application.ScreenUpdating = FalseCall 类Dim i As Integer。
VBA中常见的函数与方法速查手册
VBA中常见的函数与方法速查手册VBA(Visual Basic for Applications)是一种用于编写Microsoft Office套件中宏和自定义函数的编程语言。
作为Microsoft Office产品的一部分,VBA具有强大的功能和灵活性,可以帮助用户自动化处理数据、生成报表、操作图形等。
在VBA中,函数和方法是最基础且最常用的工具。
本文将为您提供VBA中常见的函数与方法速查手册,以便您熟练运用VBA进行自动化编程。
一、常见的函数1. Msgbox函数Msgbox函数用于在窗口中显示一条消息,并返回一个按键值。
语法:Msgbox(prompt[, buttons] [, title] [, helpfile, context])示例:Msgbox "Hello, World!",vbInformation+vbOKCancel,"提示"2. InputBox函数InputBox函数用于在窗口中显示一个对话框,提示用户输入一个值。
语法:InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])示例:Value = Inputbox("请输入一个数字:")3. Len函数Len函数用于返回字符串的长度。
语法:Len(string)示例:Len("Hello, World!") ' 返回结果为134. Left函数Left函数用于返回字符串左边指定个数的字符。
语法:Left(string, length)示例:Left("Hello, World!", 5) ' 返回结果为"Hello"5. Right函数Right函数用于返回字符串右边指定个数的字符。
语法:Right(string, length)示例:Right("Hello, World!", 6) ' 返回结果为"World!"6. Mid函数Mid函数用于返回字符串中指定位置的字符。
VBA函数大全(自己整理的)
Abs函数返回参数的绝对值,其类型和参数相同。
Array函数返回一个包含数组的Variant。
Asc函数返回一个Integer,代表字符串中首字母的字符代码。
Atn函数返回一个Double,指定一个数的反正切值。
CallByName函数执行一个对象的方法,或者设置或返回一个对象的属性。
Choose函数从参数列表中选择并返回一个值。
Chr函数返回String,其中包含有与指定的字符代码相关的字符。
Cos函数返回一个Double,指定一个角的余弦值。
CreateObject函数创建并返回一个对ActiveX对象的引用。
CurDir函数返回一个Variant(String),用来代表当前的路径。
CVErr函数返回Error子类型的Variant,其中包含指定的错误号。
Date函数返回包含系统日期的Variant(Date)。
DateAdd函数返回包含一个日期的Variant(Date),这一日期还加上了一段时间间隔。
DateDiff函数返回Variant(Long)的值,表示两个指定日期间的时间间隔数目。
DatePart函数返回一个包含已知日期的指定时间部分的Variant(Integer)。
DateSerial函数返回包含指定的年、月、日的Variant(Date)。
DateValue函数返回一个Variant(Date)。
Day函数返回一个Variant(Integer),其值为1到31之间的整数,表示一个月中的某一日。
DDB函数返回一个Double,指定一笔资产在一特定期间内的折旧。
可使用双下落收复平衡方法或其它指定的方法进行计算。
Dir函数返回一个String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。
DoEvents函数转让控制权,以便让操作系统处理其它的事件。
Environ函数返回String,它关连于一个操作系统环境变量。
在Macintosh中不可用EOF函数返回一个Integer,它包含Boolean值True,表明已经到达为Random或顺序Input 打开的文件的结尾。
VBA函数与公式
VBA函数与公式1.VBA函数:VBA函数是一种使用Visual Basic for Applications (VBA)编写的自定义函数。
VBA函数可以用于执行复杂的数学和逻辑计算,并返回结果。
与普通的Excel函数不同,VBA函数可以根据特定的需求进行自定义,而且可以在多个工作表和工作簿中复用。
VBA函数的编写需要一定的编程知识,但它的灵活性和功能更强大。
在Excel中,可以通过VBA函数来实现一些无法使用内置函数完成的特定任务。
例如,可以编写一个VBA函数来计算一些数据列中的平均值、中位数、最大值等。
此外,还可以使用VBA函数来自动化处理数据和生成报表,提高工作效率。
编写一个VBA函数需要遵循一定的规则和语法,在Excel的VBE (Visual Basic Editor)中进行编写和调试。
编写完成后,可以通过在Excel单元格中使用函数名称来调用该函数,例如“=MyFunction(”。
2.公式:Excel公式是一种用于在单元格中执行计算的特定语法。
Excel提供了许多内置函数,可以直接在公式中使用,如SUM、AVERAGE和IF等。
公式可以用于简单的数学计算,也可以用于更复杂的逻辑计算,例如条件判断和嵌套函数。
公式使用起来比较简单,不需要编程知识。
在Excel的单元格中,可以直接输入等号“=”,然后输入相应的公式即可。
公式可以引用其他单元格中的数据,并根据指定的计算规则进行计算,最后返回结果。
使用Excel公式可以方便地处理数据和执行计算,但功能相对有限。
当需要进行一些复杂的数据处理和计算时,可能无法使用公式实现。
此时,可以考虑使用VBA函数来解决问题。
3.VBA函数与公式的比较:-功能:VBA函数比公式功能更强大,可以实现更复杂的数据处理和计算。
VBA函数可以通过编程的方式实现一些特定的功能,而公式只能使用内置函数和操作符。
-灵活性:VBA函数可以根据需求进行自定义,灵活性更高。
可以编写VBA函数来处理具体的业务需求,例如根据其中一种算法计算得分、过滤特定的数据等。
VBA内部函数
VBA内部函数在VBA程序语言中有许多内置函数,可以帮助程序代码设计和减少代码的编写工作。
一.测试函数IsNumeric(x) ‘是否为数字, 返回Boolean结果,True or FalseIsDate(x) ‘是否是日期, 返回Boolean结果,True or FalseIsEmpty(x)‘是否为Empty, 返回Boolean结果,True or FalseIsArray(x) ‘指出变量是否为一个数组。
IsError(expression) ‘指出表达式是否为一个错误值IsNull(expression) ‘指出表达式是否不包含任何有效数据 (Null)。
IsObject(identifier)‘指出标识符是否表示对象变量二.vba数学函数Sin(X)、Cos(X)、Tan(X)、Atan(x) 三角函数,单位为弧度Log(x) 返回x的自然对数Exp(x)返回 exAbs(x) 返回绝对值Int(number)、Fix(number) 都返回参数的整数部分,区别:Int 将 -8.4 转换成 -9,而 Fix 将-8.4 转换成 -8Sgn(number) 返回一个 Variant (Integer),指出参数的正负号Sqr(number) 返回一个 Double,指定参数的平方根VarType(varname) 返回一个 Integer,指出变量的子类型Rnd(x)返回0-1之间的单精度数据,x为随机种子三、vba字符串函数列表Trim(string) 去掉string左右两端空白Ltrim(string) 去掉string左端空白Rtrim(string) 去掉string右端空白Len(string) 计算string长度Left(string, x) 取string左段x个字符组成的字符串Right(string, x) 取string右段x个字符组成的字符串Mid(string, start,x) 取string从start位开始的x个字符组成的字符串Ucase(string) 转换为大写Lcase(string) 转换为小写Space(x) 返回x个空白的字符串Asc(string) 返回一个 integer,代表字符串中首字母的字符代码Chr(charcode) 返回string,其中包含有与指定的字符代码相关的字符四.VBA转换函数列表CBool(expression) 转换为Boolean型CByte(expression) 转换为Byte型CCur(expression) 转换为Currency型CDate(expression) 转换为Date型CDbl(expression) 转换为Double型CDec(expression) 转换为Decemal型CInt(expression) 转换为Integer型CLng(expression) 转换为Long型CSng(expression) 转换为Single型CStr(expression) 转换为String型CVar(expression) 转换为Variant型Val(string) 转换为数据型Str(number) 转换为String五.VBA时间函数Now 返回一个 Variant (Date),根据计算机系统设置的日期和时间来指定日期和时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函數語言元件說明Abs 函數傳回一個數字的絕對值。
Array 函數傳回包含陣列的Variant。
Asc 函數傳回對應到字串中第一個字母的ANSI 字元碼。
Atn 函數傳回一個數字的餘切值。
CBool 函數傳回已轉換成Boolean 次型態Variant 的運算式。
CByte 函數傳回已轉換成Byte 次型態Variant 的運算式。
CCur 函數傳回已轉換成Currency 次型態Variant 的運算式。
CDate 函數傳回已轉換成Date 次型態Variant 的運算式。
CDbl 函數傳回已轉換成Double 次型態Variant 的運算式。
Chr 函數傳回與指定的ANSI 字元碼相關的字元。
CInt 函數傳回已轉換成Integer 次型態Variant 的運算式。
CLng 函數傳回已轉換成Long 次型態Variant 的運算式。
Cos 函數傳回一個角度的餘弦值。
CreateObject 函數建立並傳回一個Automation 物件的參考。
CSng 函數傳回已轉換成Single 次型態Variant 的運算式。
CStr 函數傳回已轉換成String 次型態Variant 的運算式。
Date 函數傳回目前的系統日期。
DateAdd 函數傳回已加入指定的時間間隔的日期。
DateDiff 函數傳回兩個日期之間的間隔數。
DatePart 函數傳回特定日期的指定部分。
DateSerial 函數傳回指定年、月、日的Date 次型態Variant。
DateValue 函數傳回Date 次型態的Variant。
Day 函數傳回介於 1 到31 之間的整數(包括 1 和31),代表月份中的日期。
Eval 函數求出運算式的值,並傳回結果。
Exp 函數傳回 e (自然對數的底數) 的某次方。
Filter 函數傳回從零起算的陣列,其中包含一個根據指定的過濾標準所得的字串陣列子集。
Fix 函數傳回數字的整數部分。
FormatCurrency函數傳回已設定成貨幣值格式的運算式,此貨幣值使用系統控制台中所定義之貨幣符號。
FormatDateTime函數傳回已設定成日期或時間格式的運算式。
FormatNumber 函數傳回已設定成數字格式的運算式。
FormatPercent 函數傳回一個運算式,其格式設定成後面跟著% 字元的百分比值。
GetLocale 函數傳回目前語系識別碼(LocaleID) 的值。
GetObject 函數從檔案傳回Automation 物件的參考。
GetRef 函數傳回一個程序的參考,而且這個程序必須可以與某個事件結合。
Hex 函數傳回一個字串,代表一個數字的十六進位值。
Hour 函數傳回介於0 到23 之間的整數(包括0 和23),代表一天中的小時。
InputBox 函數以對話方塊顯示提示,等使用者輸入文字或按一下按鈕,再傳回文字方塊的內容。
InStr 函數傳回一個字串在另一個字串中第一次出現的位置。
InStrRev 函數傳回一個字串在另一個字串中出現的位置,而且該位置是從字串的後面算起。
Int 函數傳回數字的整數部分。
IsArray 函數傳回一個布林值,指出變數是否為陣列。
IsDate 函數傳回一個布林值,指出運算式是否可以轉換成日期。
IsEmpty 函數傳回一個布林值,指出變數是否已初始化。
IsNull 函數傳回一個布林值,指出運算式是否不包含任何有效的資料(Null)。
IsNumeric 函數傳回一個布林值,指出運算式能否求出數字。
IsObject 函數傳回一個布林值,指出運算式是否引用有效Automation 物件的運算式。
Join 函數傳回一個字串,它是結合陣列中所包含的數個子字串。
LBound 函數傳回指示的陣列維數可用的最小陣列索引。
LCase 函數傳回已轉換成小寫的字串。
Left 函數傳回字串左端指定個數的字元。
Len 函數傳回字串中指定個數的字元,或儲存一變數所需的位元個數。
LoadPicture 函數傳回圖片物件。
只適用於32 位元平台。
Log 函數傳回一個數字的自然對數。
LTrim 函數傳回一個字串沒有前置空白的副本。
Mid 函數傳回字串中指定個數的字元。
Minute 函數傳回介於0 到59 之間的整數(包含0 和59),代表一小時中的分鐘。
Month 函數傳回介於 1 到12 之間的整數(包含 1 和12),代表一年中的月份。
MonthName 函數傳回表示指定月份的字串。
MsgBox 函數以對話方塊顯示訊息,等使用者按一下按鈕再傳回數值,指出使用者按了哪個按鈕。
Now 函數根據電腦的系統日期和時間設定傳回目前的日期和時間。
Oct 函數傳回一個字串,代表一個數字的八進位值。
Replace 函數傳回一個字串,其中指定子字串已由別的子字串取代指定的次數。
RGB 函數傳回代表RGB 色彩值的整數。
Right 函數傳回字串右端指定個數的字元。
Rnd 函數傳回一個亂數。
Round 函數傳回已進位到指定小數位的數字。
RTrim 函數傳回一個字串沒有後續空白的副本。
ScriptEngine 函數傳回一個字串,代表使用中的Scripting 程式語言。
ScriptEngineBuildVersion 函數傳回使用中Scripting 引擎的建立版本號碼。
ScriptEngineMajorVersion 函數傳回使用中Scripting 引擎的主要版本號碼。
ScriptEngineMinorVersion 函數傳回使用中Scripting 引擎的次要版本號碼。
Second 函數傳回介於0 到59 之間的整數(包含0 和59),代表一分鐘中的秒數。
SetLocale 函數設定全域語系並傳回原來的語系。
Sgn 函數傳回指出數字之正負號的整數。
Sin 函數傳回一角度的正弦值。
Space 函數傳回由指定個數的空白組成的字串。
Split 函數傳回從零起算的一維陣列,其內容包含指定個數的子字串。
Sqr 函數傳回一個數字的平方根。
StrComp 函數傳回表示字串比較結果的值。
String 函數傳回指定長度的重覆字元字串。
StrReverse 函數傳回一個字串,它將指定字串的字元順序顛倒過來。
Tan 函數傳回一個角度的正切值。
Time 函數傳回指出目前系統時間的Date 次型態Variant。
Timer 函數傳回從12:00 AM (午夜) 起到現在已經過的秒數。
TimeSerial 函數傳回內含指定時、分、秒的Date 次型態Variant。
TimeValue 函數傳回內含指定時間的Date 次型態Variant。
Trim 函數傳回一個字串沒有前置或後續空白的副本。
TypeName 函數傳回一個字串,以提供有關某個變數的次型態資訊。
UBound 函數傳回指示的陣列維數可用的最大陣列索引。
UCase 函數傳回已轉換成大寫的字串。
VarType 函數傳回指出變數次型態的值。
Weekday 函數傳回代表一周中某天的整數。
WeekdayName 函數傳回代表一周中某天的字串。
Year 函數傳回代表年份的整數。
加號運算子(+) 加總兩個數字。
And 運算子在兩個運算式中執行邏輯結合。
指定運算子(=) 將一個值指定給一個變數或屬性。
串連運算子(&) 強迫連結兩個運算式。
除號運算子(/) 將兩個數字相除,並傳回一個浮點結果。
Eqv 運算子在兩個運算式中執行邏輯性全等運算。
指數運算子(^) 求一個數字的指定指數次方。
Imp 運算子在兩個運算式中執行邏輯性包含運算。
整數除號運算子(\) 將兩個數字相除,並傳回整數結果。
Is 運算子比較兩個物件參考變數。
Mod 運算子將兩個數字相除,並且只傳回餘數。
乘號運算子(*) 將兩個數字相乘。
負數運算子(-) 指出數值運算式的負值。
Not 運算子在一個運算式中執行邏輯性的負數運算。
運算子優先順序列出VBScript 中所用的各種運算子優先順序。
Or 運算子在兩個運算式中執行邏輯性分離運算。
減號運算子(-) 求出兩個數字的差,或指出數值運算式的負值。
Xor 運算子再兩個運算式中執行邏輯性互斥運算。
Call 陳述式將控制權交給Sub 或Function 程序。
Class 陳述式宣告物件類別的名稱。
Const 陳述式宣告常數,用來取代文字值。
Dim 陳述式宣告變數,並配置儲存空間。
Do...Loop 陳述式在條件為True 的情況下重覆一段陳述式,或一直重覆到條件變成True 為止。
Erase 陳述式重新初始化固定大小陣列的元件,並取消配置動態陣列的儲存空間。
Execute 陳述式執行一或多個指定的陳述式。
ExecuteGlobal陳述在script 的全域命名空間中執行一或多個指定的陳述式。
Exit 陳述式結束一段Do...Loop、For...Next、Function 或Sub 程式碼。
For...Next 陳述式重覆一組陳述式指定的次數。
For Each...Next 對陣列或集合物件的每個元件重覆一組陳述式。
Function 陳述式宣告名稱、引數和程式碼,以構成Function 程序的主體。
If...Then...Else 根據運算式的值有條件地執行一組陳述式。
On Error 陳述式啟動錯誤處理常式。
Option Explicit 強迫script 中的所有變數須明確宣告。
Private 陳述式宣告私有的變數,並配置儲存空間。
PropertyGet 陳述式宣告名稱、引數和程式碼,以構成Property 程序的主體,這個程序會取得(傳回) 一個屬性的值。
PropertyLet 陳述式宣告名稱、引數和程式碼,以構成Property 程序的主體,這個程序會指定一個屬性的值。
PropertySet 陳述式宣告名稱、引數和程式碼,以構成Property 程序的主體,這個程序會設定指向一個物件的引用。
Public 陳述式宣告公用的變數,並配置儲存空間。
Randomize 陳述式初始化亂數產生器。
ReDim 陳述式宣告動態陣列變數,並配置或取消配置程序階層的儲存空間。
Rem 陳述式在程式中包含說明性的註解。
Select Case 陳述式根據運算式的值執行幾組陳述式之一。
Set 陳述式指定物件參考給變數或屬性。
Sub 陳述式宣告名稱、引數和程式碼,以構成Sub 程序的主體。
While...Wend陳述式只要已知條件為True,就一直執行一串陳述式。
With 陳述式對單一物件執行一串陳述式。