Excel VBA语句集300
excel vba if语句

excel vba if语句VBA(VisualBasicforApplications)是由微软设计和推出的,附加于各种Microsoft Office应用程序中的开发环境,它使得开发者可以使用Visual Basic语言来开发自定义的应用程序和程序。
VBA 的if语句俗称“if-then语句”,是一种结构化的编程语句,用于判断某个表达式的值是否为真,并做出相应的处理。
本文将介绍VBA的if语句的基本结构、用法和实例,以帮助更好的理解和运用。
一、VBA If语句的基本结构VBA的if语句的语法基本结构如下:If condition Then[statement1][Else[statement2]]End If其中:condition:为表达式,表达式的值可以为True或False;statement1:如果条件condition为True,那么执行该语句; statement2:如果条件condition为False,那么执行该语句,它是可选的。
二、VBA If语句的用法(1)简单的if语句VBA的if语句最基本的用法是使用一个if语句进行判断,如果条件成立,就执行一句语句,如下所示:Dim x As Integerx = 10If x > 5 ThenMsgBox x大于5End If假如x的值大于5,那么就会输出“x大于5”的消息框,否则不会有任何操作。
(2)if-else语句除此之外,VBA的if语句还可以使用if-else结构,如果条件成立,就执行一句语句,如果条件不成立,就执行另一句语句,如下所示:Dim x As Integerx = 10If x > 5 ThenMsgBox x大于5ElseMsgBox x小于等于5End If(3)if-elseif-else语句另外,VBA的if语句还可以使用if-elseif-else结构,条件判断如果多于两个的时候,可以使用该语句,如下所示:x = 5If x > 5 ThenMsgBox x大于5ElseIf x < 5 ThenMsgBox x小于5ElseMsgBox x等于5End If上面的代码会输出“x等于5”的消息框,因为x的值是5,所以第一个和第二个条件都不成立,最后一个条件才为真。
excel vba 命令中的参数引用表格中的文本

一、引言在Excel VBA编程中,常常需要对表格中的数据进行处理,其中包括对文本数据进行引用及操作。
本文将介绍在Excel VBA命令中如何引用表格中的文本数据,涉及到参数的引用和操作技巧。
通过本文的学习,读者将能够更加熟练地处理表格中的文本数据,并在编程中运用这些技巧。
二、引用单元格中的文本1. 使用Cells方法引用在Excel VBA中,可以使用Cells方法引用表格中的文本数据,该方法的语法如下:```VBACells(row, column).Value```其中,row和column分别表示单元格的行号和列号,Value表示单元格中的数值。
要引用A1单元格中的文本数据,可以使用以下代码:```VBACells(1, 1).Value```通过这种方法可以方便地引用表格中任意单元格的文本数据。
2. 使用Range方法引用除了Cells方法,也可以使用Range方法来引用表格中的文本数据,其语法如下:```VBARange("A1").Value```其中,A1表示单元格的位置,Value表示单元格中的数值。
通过这种方法同样可以轻松引用表格中的文本数据。
三、引用多个单元格中的文本1. 使用For循环引用在Excel VBA中,如果需要引用多个单元格中的文本数据,可以使用For循环来遍历这些单元格,然后逐个引用。
具体代码如下:```VBAFor i = 1 To 10Cells(i, 1).ValueNext i```通过这种方法可以依次引用A1到A10单元格中的文本数据。
2. 使用Range方法引用除了For循环,也可以使用Range方法来引用多个单元格中的文本数据,其语法如下:```VBARange("A1:A10").Value通过这种方法可以一次性引用A1到A10单元格中的文本数据,非常方便。
四、操作引用的文本数据1. 字符串拼接在引用文本数据后,可以对其进行各种操作,比如字符串拼接。
VBA常用语句(with语句)

VBA常用语句(with语句)观察一下我们做合并工作表以及一些其它任务的VBA代码就会发现,我们经常能看到一些语句,例如:ifend if之类的固定语句,这些就是VBA中常用的基本语句。
这些语句可以实现循环、逻辑判断等等目的。
VBA中的语句有70多种,今天我们学习最常用的四种语句中的第一种。
1、With语句正常情况下我们完成下列需求:选择单元格A1,设置字体加粗,倾斜,加下划线,底色为黄色。
代码如下:Sub 宏1()Range('A1').Font.Bold = TrueRange('A1').Font.Italic = TrueRange('A1').Font.Underline = xlUnderlineStyleSingleRange('A1').Interior.Color = 65535End Sub对象.属性.属性值这样,每个属性前面的对象都要重复写。
用with正好可以解决这个事情。
结构如下:with 对象.属性1=属性值.属性2=属性值.属性3=属性值…….属性N=属性值end with上面代码修改后如下:Sub 宏2()With Range('A1').Font.Bold = True.Font.Italic = True.Font.Underline = xlUnderlineStyleSingle.Interior.Color = 65535End WithEnd Sub这样就可以避免每次都要重复写对象了。
今天的分享就到这里。
只要你行动,离梦想就会更近一步,欢迎加入我们的学习行列,经常问问题的同学也希望你能转发、分享、赞赏,帮助别人也是在帮自己。
想报名参加培训的同学请联系本人微信:527240310,针对你日常工作中遇到的问题进行培训,培训时会发你素材,同步操作,让你真正学明白。
一次报名后,后期录制的所有视频均可免费观看。
excel vba for语句

excel vba for语句Excel VBA中的For语句是一种循环结构,用于重复执行特定的操作。
在这篇文章中,我将列举出10个例子,展示如何使用For语句来解决不同的问题。
1. 逐行读取并处理数据:使用For语句可以逐行读取Excel表格中的数据,并对每一行进行处理。
例如,可以使用For语句来计算每一行的总和或平均值。
2. 复制数据到另一个工作表:有时候需要将一个工作表中的数据复制到另一个工作表中。
可以使用For语句来遍历源工作表中的每一行,并将数据复制到目标工作表中的相应位置。
3. 条件筛选数据:使用For语句可以根据特定的条件筛选数据。
例如,可以使用For语句遍历一个工作表中的每一行,并只复制满足特定条件的行。
4. 数据排序:使用For语句可以对数据进行排序。
例如,可以使用For语句遍历一个工作表中的每一行,并根据某一列的值对数据进行排序。
5. 数据合并:有时候需要将多个工作表中的数据合并到一个工作表中。
可以使用For语句遍历每个源工作表中的每一行,并将数据复制到目标工作表中的相应位置。
6. 数据过滤:使用For语句可以根据特定的条件过滤数据。
例如,可以使用For语句遍历一个工作表中的每一行,并只保留满足特定条件的行。
7. 数据校验:使用For语句可以对数据进行校验。
例如,可以使用For语句遍历一个工作表中的每一行,并检查数据是否符合特定的规则。
8. 数据格式化:使用For语句可以对数据进行格式化。
例如,可以使用For语句遍历一个工作表中的每一行,并根据某一列的值对数据进行格式化。
9. 数据统计:使用For语句可以对数据进行统计。
例如,可以使用For语句遍历一个工作表中的每一行,并计算某一列的总和或平均值。
10. 数据导出:使用For语句可以将数据导出到其他文件或数据库中。
例如,可以使用For语句遍历一个工作表中的每一行,并将数据导出到一个文本文件或Access数据库中。
以上是10个使用Excel VBA For语句的例子,展示了For语句在数据处理和分析中的多种应用。
各种ExcelVBA的命令2-电脑资料

各种ExcelVBA的命令2-电脑资料本示例重复最近用户界面命令,。
本示例必须放在宏的第一行。
Application.Repeat下例中,变量counter 代替了行号。
此过程将在单元格区域C1:C20 中循环,将所有绝对值小于 0.01 的数字都设置为 0(零)。
Sub RoundToZero1()For Counter = 1 To 20Set curCell = Worksheets("Sheet1").Cells(Counter, 3)If Abs(curCell.Value) 0 Then' Application.ActivePRinter = "\\zdserver2\HP LaserJet 5000 PCL 6在 Ne00:" '指定打印机ActiveWindow.SelectedSheets.PrintOutCopies:=myPrintNum,Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数ElseMsgBox "请输入要打印的份数"End IfActiveSheet.ShowAllData '全部显示ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码Sheets("封面").SelectApplication.ScreenUpdating = TrueEnd SubSub 打印余额()Application.ScreenUpdating = FalseSheets("余额表").SelectCall 重算所有表ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码ActiveWindow.ScrollColumn = 10Selection.AutoFilter Field:=1, Criteria1:=""'以下10行弹出窗口输入打印信息Dim myPrintNum As IntegerDim myPrompt, myTitle As StringmyPrompt = "请输入要打印的份数"myTitle = "打印选取范围"myPrintNum = Application.InputBox(myPrompt, myTitle, 4, , , , , 1)If myPrintNum 0 Then' Application.ActivePrinter = "\\zdserver2\HP LaserJet 5000 PCL 6 在Ne00:" ' '指定打印机ActiveWindow.SelectedSheets.PrintOutCopies:=myPrintNum,Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数ElseMsgBox "请输入要打印的份数"End IfActiveSheet.ShowAllData '全部显示ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码Sheets("封面").SelectApplication.ScreenUpdating = TrueEnd SubSub 备份()Dim y '变量声明-需保存工作表的路径和名称[M1] = ActiveWorkbook.FullName '单元格M1=当前工作簿的路径和名称y = cells(1, 14) 'Y=单元格N1的值,即计算后的需保存工作簿的路径和名称Worksheets("封面").UsedRange.Columns("M:N").Calculate '计算指定区域ActiveWorkbook.SaveCopyAs y '备份到指定路么YEnd SubSub 重算活动表()With Application.Calculation = xlManual.MaxChange = 0.001End WithActiveWorkbook.PrecisionAsDisplayed = TrueActiveWindow.DisplayZeros = TrueActiveSheet.CalculateEnd SubSub 重算指定表()Attribute 重算指定表.VB_ProcData.VB_Invoke_Func = "z\n14"Worksheets("银行帐").CalculateWorksheets("日报表").CalculateEnd Sub单元格数据改变引起计算激活过程Private Sub Worksheet_Change(ByVal Target As Range)Dim irow, icol As Integerirow = Target.Row '变量行irowicol = Target.Column '变量列icolIf irow > 6 And icol = 3 And cells(irow, 3) >= cells(irow - 1, 3)Then '>大于6行,并且第3列,当本行 3列>2行3列Application.EnableEvents = Falsecells(irow, 2) = cells(irow - 1, 2) '本行 2 列=上一行2列Application.EnableEvents = TrueElseIf irow > 6 And icol = 3 And cells(irow, 3) 大于6行,并且第3列,当本行 3列>2行3列Application.EnableEvents = Falsecells(irow, 2) = cells(irow - 1, 2) + 1 '本行 2 列=上行2列+1Application.EnableEvents = TrueElseIf (icol = 3 Or icol = 4 Or icol = 6 Or icol = 8 Or icol = 9 Oricol = 10 Or icol = 12 Or icol = 13) And irow > 6 Then 'And Target""Application.EnableEvents = Falsecells(irow, 5) = "=单位名称"cells(irow, 7) = "=摘要"cells(irow, 11) = "=余额"Range(cells(irow, 14), cells(irow, 16)) = "=预内外收支NOP"cells(irow, 17) = "=审核Q"cells(irow, 18) = "=对帐U"Range(cells(irow, 19), cells(irow, 20)) = "=内转收支XY"cells(irow, 21) = "=政采Z"Application.EnableEvents = TrueEnd IfEnd Sub'计算当前工作表路径及名称的函数,可作为单元格公式,也可写入宏=CELL("FILENAME")'改变Excel界面标题的宏Private Sub Workbook_Open()Application.Caption = "吃过了"End Sub'自动刷新单元格A1内显示的日期\时间的宏Sub mytime()Range("a1") = Now()Application.OnTime Now + TimeValue("00:00:01"), "mytime"End Sub'用单元格A1的内容作为文件名保存当前工作簿的宏Sub b()ActiveWorkbook.SaveCopyAs Range("A1") + ".xls"End Sub'激活窗体的宏,此宏写入有窗体的工作表内Private Sub CommandButton1_Click() '点数据录入按钮控件激活窗体Load UserForm3 '激活窗体UserForm3.StartUpPosition = 3 '激活窗体UserForm3.Show '激活窗体End Sub'以下为窗体中点击各按钮运行的宏,写入窗体内Public pos As Integer '声明变量pos'战友确定按钮语句Private Sub CommandButton1_Click()Application.ScreenUpdating = False '此句和最后一句旨在不显示宏的执行过程'On Error GoTo ErrorHandle '可以不要'ErrorHandle: '可以不要'If Err.Number = 13 Then '可以不要'Exit Sub '可以不要'End If '可以不要Call writeToWorkSheet '执行宏writetoworksheetUserForm3.Hide '退出窗体,继续按钮少此句,退出按钮执行此句Unload UserForm3 '退出窗体,继续按钮少此句,退出按钮执行此句Call 批量打印 '[此处到接顺序2][L2] = "" '[到此处结束]Sheets("打印信息").SelectApplication.ScreenUpdating = TrueEnd Sub'退出按钮语句Private Sub CommandButton2_Click()UserForm3.HideUnload UserForm3End Sub'将窗体内的文本框中的数据写进工作表的单元格Private Sub writeT oWorkSheet()ActiveSheet.Range("k2") = TextBox1.Value '将文字框内容写进k列ActiveSheet.Range("l2") = TextBox2.Value '将文字框内容写进l 列TextBox1.Value = "" '清空文字框内容TextBox2.Value = "" '清空文字框内容Worksheets("打印信息").Range("a2").Value = 1 '给指定表的单元格写入数据Worksheets("打印信息").Range("B3:E113").Value = "" '清空指定表的单元格数据End Sub'以下为根据条件打印的宏Sub 打印() '部门明细查询及批星打印Application.ScreenUpdating = False '关闭屏幕更新If Cells(1, 4) = "" And Cells(1, 5) = "" Then '打印条件Cells(3,13) = 1 And' Application.ActivePrinter = "\\zdserver2\HP LaserJet 5000 PCL6 在 Ne00:" ' '指定打印机ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True'设置默认打印机的打印信息,其中Copies:=myPrint为打印份数ElseCall 打印信息 '打倒为假时执行End IfApplication.ScreenUpdating = True '关闭屏幕更新End Sub'以下的循环过程,也用于批量打印,Z的值可以是Z=1 TO 5(1到5),也可是单元格的内容Sub 批量打印()For Z = Cells(1, 11) To Cells(1, 12) '变量X的值从打印起始号K1到结束号L1之间逐渐递增Cells(1, 13) = Z 'M1的值等于变量XEnd Sub'以下是将打印情况写入工作表的宏Sub 打印信息()Application.ScreenUpdating = False '关闭屏幕更新Dim Y '声明变量Y = '判定活动工作表名称Sheets("打印信息").SelectX = 3 '从第3行开始Do While Not (IsEmpty(Cells(X, 2).Value)) '判断第1列的最后一行(即空行的上一行)X = X + 1 '在最后一行加一行即为空行LoopCells(X, 2) = Cells(2, 1)Cells(X, 3) = Sheets(Y).Cells(4, 3)Cells(2, 1) = Cells(2, 1) + 1Cells(X, 4) = Sheets(Y).Cells(1, 4)Cells(X, 5) = Sheets(Y).Cells(1, 5)[c1] = YSheets(Y).Select '返回上一次打开的工作表Application.ScreenUpdating = True '打开屏幕更新End Sub将文件保存为以某一单元格中的值为文件名的宏怎么写假设你要以Sheet1的A1单元格中的值为文件名保存,则应用命令:ActiveWorkbook.SaveCopyAs Str(Range("Sheet1!A1")) + ".xls"在Excel中,如何用程式控制某一单元格不可编辑修改?thanks Private Sub Workbook_Open()ProtectSpecialRange ("A1")Sub ProtectSpecialRange(RangeAddress As String)On Error Resume NextWith Sheet1.Cells.Locked = False.Range(RangeAddress).Locked = True.Protection.AllowEditRanges.Add Title:="区域1", Range:=Range(RangeAddress) _, Password:="pass".Protect DrawingObjects:=True, Contents:=True, Scenarios:=TrueEnd WithEnd Sub对工作表编程,有时要判断工作表的记录总数,VBA里如何实现?x=1do while not (isempty(sheets("").cells(x,1).value)x=x+1loop在VBA中等同于EXCELE中的求和函数-sum()-的函数是什么?Application.WorksheetFunction.Sum()自定义菜单有三个菜单项,要求手工顺序执行,电脑资料《各种Excel VBA的命令2》(https://www.)。
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。
excel里取消选定单元格的vba语句
Excel是一款功能强大的办公软件,它不仅可以用于数据记录和分析,还可以通过宏(VBA)语句进行自动化操作,提高工作效率。
在Excel 中取消选定单元格是一个常见的操作,下面将介绍如何使用VBA语句来取消选定单元格。
我们需要了解VBA语句是什么以及如何在Excel中使用它。
VBA是Visual Basic for Applications的简称,它是一种用于编写宏的编程语言,可以通过编写VBA代码来实现Excel中的各种功能。
在Excel中打开“开发者”选项卡,点击“Visual Basic”按钮即可打开VBA编辑器,通过在编辑器中编写代码来实现各种操作。
接下来,我们将介绍如何使用VBA语句来取消选定单元格。
在VBA编辑器中,我们可以使用Selection对象来操作选定单元格。
要取消选定的单元格,可以使用ClearContents方法来清除单元格中的内容,或者使用ClearFormats方法来清除单元格的格式。
以下是具体的VBA语句示例:1. 使用ClearContents方法取消选定单元格的内容:```Selection.ClearContents```2. 使用ClearFormats方法取消选定单元格的格式:Selection.ClearFormats```以上两种方法可以根据实际需求来选择使用。
除了取消选定单元格的内容和格式外,我们还可以使用其他VBA语句来实现更多操作,比如取消选定单元格的公式、取消选定单元格的边框等。
在编写VBA代码时,需要注意语法的正确性和逻辑的严谨性,以确保代码的稳定性和可靠性。
通过VBA语句可以实现在Excel中取消选定单元格的操作,这对于提高工作效率和减少重复操作非常有帮助。
希望以上内容能对您有所帮助,谢谢阅读!在Excel中使用VBA语句进行自动化操作是非常有用的,它可以帮助我们简化繁琐的操作,提高工作效率。
除了取消选定单元格的操作,VBA还可以实现很多其他功能,比如自动筛选数据、自动生成报表、批量处理数据等。
excel vba常用的条件语句 case
excel vba常用的条件语句case什么是Excel VBA条件语句?Excel VBA(Visual Basic for Applications)是一种编程语言,可用于自动化处理Excel中的各种任务。
条件语句是一种编程中常用的结构,可根据不同的条件执行不同的操作。
在Excel VBA中,条件语句是通过使用一组不同的语句来实现的。
其中,Case语句是一种常见的条件语句,用于根据不同的条件执行相应的操作。
什么是Case语句?Case语句是Excel VBA中用于根据不同条件执行不同操作的语句。
它类似于Switch语句,可以通过指定一个或多个可能的值来匹配条件。
Case语句的语法如下:Select Case expressionCase value1'执行操作1Case value2'执行操作2Case value3'执行操作3Case Else'如果所有条件都不符合,则执行此操作End Select在Case语句中,`expression`是需要进行判断的值,而`value1`、`value2`等是可能的值。
根据`expression`的不同取值,程序会逐个检查每个Case,并执行与之匹配的操作,如果没有匹配的情况,就会执行`Case Else`中的操作。
下面我们将详细介绍Case语句的各个方面及其在Excel VBA中的应用。
Case语句的使用方法Case语句是根据`expression`的不同取值来选择对应的操作。
假设我们有一个工作表,其中A列是水果的名称,B列是对应的价格。
现在我们需要根据输入的水果名称,找到对应的价格并输出到单元格C1中。
首先,我们需要通过VBA代码来实现这个功能。
在VBA编辑器中,我们可以编写以下代码:vbaSub FindFruitPrice()Dim fruit As Stringfruit = Range("A1").ValueSelect Case fruitCase "苹果"Range("C1").Value = 5Case "香蕉"Range("C1").Value = 3Case "橙子"Range("C1").Value = 2Case ElseRange("C1").Value = "未知"End SelectEnd Sub在这个代码中,我们首先使用`Range("A1").Value`来获取单元格A1中的水果名称,然后将其赋值给`fruit`变量。
VBA代码全集
目录一、引用 (2)二、Worksheet_Change事件: (2)三、相乘 (4)四、相减 (5)五、高级筛选 (5)六、双击事件 (7)七.单位汇总(sumif),单条件汇总 (9)八、多条件汇总(连接、sumif) (12)九、多条件汇总、ado (14)十、对账 (15)十一、sql筛选 (19)十二、sql连接、交叉汇总 (20)十三、select语句总结 (22)十四、报表(有层次) (23)一、引用相对引用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).NameNext 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。
excel vba return语句
excel vba return语句摘要:一、Excel VBA简介1.Excel VBA的定义2.Excel VBA的作用二、Return语句1.Return语句的定义2.Return语句的使用方法3.Return语句的实例分析三、Return语句在Excel VBA中的应用1.工作表操作2.单元格操作3.数据处理四、Return语句的注意事项1.避免滥用Return语句2.Return语句与End语句的区别正文:一、Excel VBA简介Excel VBA,即Visual Basic for Applications,是Microsoft Office中的一种编程语言,它允许用户通过编写代码来扩展Office软件的功能。
在Excel 中,VBA可以用于自动化各种任务,如数据处理、图表绘制、工作表操作等。
通过VBA编程,用户可以自定义按钮、菜单和工具栏,实现个性化的Excel操作。
二、Return语句1.Return语句的定义Return语句是VBA中用于结束子程序或函数执行并返回一个值的语句。
当程序执行到Return语句时,程序将立即结束当前过程,并返回指定的值。
如果Return语句没有指定返回值,则默认为0。
2.Return语句的使用方法Return语句的基本语法如下:```Return [expression]```其中,expression表示要返回的值。
如果不需要返回值,只需使用Return关键字即可。
3.Return语句的实例分析以下是一个简单的Excel VBA函数,使用Return语句返回一个单元格的值:```vbaFunction GetCellValue(ByVal cellAddress As String) As Variant Dim ws As WorksheetSet ws = ThisWorkbook.Worksheets("Sheet1")Dim cell As RangeSet cell = ws.Range(cellAddress)Return cell.ValueEnd Function```三、Return语句在Excel VBA中的应用1.工作表操作在Excel VBA编程中,Return语句可以用于结束子程序或函数,以便执行其他操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Excel VBA语句集300 定制模块行为 (1)OptionExplicit ' 强制对模块内所有变量进行声明 OptionPrivateModule ' 标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 OptionCompareText ' 字符串不区分大小写 OptionBase1 ' 指定数组的第一个下标为 1 (2)OnErrorResumeNext ' 忽略错误继续执行 VBA 代码 , 避免出现错误消息 (3)OnErrorGoToErrorHandler ' 当错误发生时跳转到过程中的某个位置 (4)OnErrorGoTo0 ' 恢复正常的错误提示 (5)Application.DisplayAlerts=False ' 在程序执行过程中使出现的警告框不显示 (6)Application.ScreenUpdating=False ' 关闭屏幕刷新 Application.ScreenUpdating=True ' 打开屏幕刷新 (7)Application.Enable.CancelKey=xlDisabled ' 禁用 Ctrl+Break 中止宏运行的功能
工作簿 (8)Workbooks.Add() ' 创建一个新的工作簿 (9)Workbooks(“book1.xls”).Activate ' 激活名为 book1 的工作簿 (10)ThisWorkbook.Save ' 保存工作簿 (11)ThisWorkbook.close ' 关闭当前工作簿 (12)ActiveWorkbook.Sheets.Count ' 获取活动工作薄中工作表数 (13)ActiveWorkbook.name ' 返回活动工作薄的名称 (14)ThisWorkbook.Name ‘ 返回当前工作簿名称 ThisWorkbook.FullName ‘ 返回当前工作簿路径和名称 (15)ActiveWindow.EnableResize=False ‘ 禁止调整活动工作簿的大小 (16)Application.Window.ArrangexlArrangeStyleTiled ‘ 将工作簿以平铺方式排列 (17)ActiveWorkbook.WindowState=xlMaximized ‘ 将当前工作簿最大化
工作表 (18)ActiveSheet.UsedRange.Rows.Count ‘ 当前工作表中已使用的行数 (19)Rows.Count ‘ 获取工作表的行数 ( 注:考虑向前兼容性 ) (20)Sheets(Sheet1).Name= “Sum” ' 将 Sheet1 命名为 Sum (21)ThisWorkbook.Sheets.AddBefore:=Worksheets(1) ' 添加一个新工作表在第一工作表前 (22)ActiveSheet.MoveAfter:=ActiveWorkbook._ Sheets(ActiveWorkbook.Sheets.Count) ' 将当前工作表移至工作表的最后
(23)Worksheets(Array(“sheet1”,”sheet2”)).Select ' 同时选择工作表 1 和工作表 2
(24)Sheets(“sheet1”).Delete 或 Sheets(1).Delete ' 删除工作表 1 (25)ActiveWorkbook.Sheets(i).Name ' 获取工作表 i 的名称 (26)ActiveWindow.DisplayGridlines=NotActiveWindow.DisplayGridlines ' 切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27)ActiveWindow.DisplayHeadings=NotActiveWindow.DisplayHeadings ‘ 切换工作表中的行列边框显示 (28)ActiveSheet.UsedRange.FormatConditions.Delete ‘ 删除当前工作表中所有的条件格式 (29)Cells.Hyperlinks.Delete ‘ 取消当前工作表所有超链接 (30)ActiveSheet.PageSetup.Orientation=xlLandscape 或 ActiveSheet.PageSetup.Orientation=2 ' 将页面设置更改为横向
(31)ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘ 在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.LeftFooter=Application.UserName ‘ 将用户名放置在活动工作表的页脚
单元格 / 单元格区域 (32)ActiveCell.CurrentRegion.Select 或 Range(ActiveCell.End(xlUp),ActiveCell.End(xlDown)).Select
' 选择当前活动单元格所包含的范围,上下左右无空行
(33)Cells.Select ‘ 选定当前工作表的所有单元格 (34)Range(“A1”).ClearContents ' 清除活动工作表上单元格 A1 中的内容 Selection.ClearContents ' 清除选定区域内容 Range(“A1:D4”).Clear ' 彻底清除 A1 至 D4 单元格区域的内容,包括格式 (35)Cells.Clear ' 清除工作表中所有单元格的内容 (36)ActiveCell.Offset(1,0).Select ' 活动单元格下移一行,同理,可下移一列 (37)Range(“A1”).Offset(ColumnOffset:=1) 或 Range(“A1”).Offset(,1) ‘ 偏移一列 Range(“A1”).Offset(Rowoffset:=-1) 或 Range(“A1”).Offset(-1) ‘ 向上偏移一行 (38)Range(“A1”).CopyRange(“B1”) ' 复制单元格 A1 ,粘贴到单元格 B1 中 Range(“A1:D8”).CopyRange(“F1”) ' 将单元格区域复制到单元格 F1 开始的区域中 Range(“A1:D8”).CutRange(“F1”) ' 剪切单元格区域 A1 至 D8 ,复制到单元格 F1 开始的区域中 Range(“A1”).CurrentRegion.CopySheets(“Sheet2”).Range(“A1”) ' 复制包含 A1 的单元格区域到工作表 2 中以 A1 起始的单元格区域中 注: CurrentRegion 属性等价于定位命令,由一个矩形单元格块组成,周围是一个或多个空行或列 (39)ActiveWindow.RangeSelection.value =XX ' 将值 XX 输入到所选单元格区域中 (40)ActiveWindow.RangeSelection.Count ' 活动窗口中选择的单元格数 (41)Selection.Count ' 当前选中区域的单元格数 (42)GetAddress=Replace(Hyperlinkcell.Hyperlinks(1).Address,mailto:,””) ‘ 返回单元格中超级链接的地址并赋值 (43)TextColor=Range(“A1”).Font.ColorIndex ‘ 检查单元格 A1 的文本颜色并返回颜色索引 Range(“A1”).Interior.ColorIndex ‘ 获取单元格 A1 背景色 (44)cells.count ‘ 返回当前工作表的单元格数 (45)Selection.Range(“E4”).Select ‘ 激活当前活动单元格下方 3 行,向右
4 列的单元格 (46)Cells.Item(5,”C”) ‘ 引单元格 C5 Cells.Item(5,3) ‘ 引单元格 C5 (47)Range(“A1”).Offset(RowOffset:=4,ColumnOffset:=5) 或 Range(“A1”).Offset(4,5) ‘ 指定单元格 F5
(48)Range(“B3”).Resize(RowSize:=11,ColumnSize:=3) Rnage(“B3”).Resize(11,3) ‘ 创建 B3 : D13 区域
(49)Range(“Data”).Resize(,2) ‘ 将 Data 区域扩充 2 列 (50)Union(Range(“Data1”),Range(“Data2”)) ‘ 将 Data1 和 Data2 区域连接 (51)Intersect(Range(“Data1”),Range(“Data2”)) ‘ 返回 Data1 和 Data2 区域的交叉区域 (52)Range(“Data”).Count ‘ 单元格区域 Data 中的单元格数 Range(“Data”).Columns.Count ‘ 单元格区域 Data 中的列数 Range(“Data”).Rows.Count ‘ 单元格区域 Data 中的行数 (53)Selection.Columns.Count ‘ 当前选中的单元格区域中的列数 Selection.Rows.Count ‘ 当前选中的单元格区域中的行数 (54)Selection.Areas.Count ‘ 选中的单元格区域所包含的区域数 (55)ActiveSheet.UsedRange.Row ‘ 获取单元格区域中使用的第一行的行号 (56)Rng.Column ‘ 获取单元格区域 Rng 左上角单元格所在列编号 (57)ActiveSheet.Cells.SpecialCells(xlCellTypeAllFormatConditions) ‘ 在活动工作表中返回所有符合条件格式设置的区域