VBA编程实例1练习
vba简单编程案列

以下是一个简单的VBA编程案例,用于在Excel中创建一个简单的计算器程序。
该程序将接受用户输入的数字和运算符,并返回结果。
```vbaSub Calculator()Dim num1 As DoubleDim num2 As DoubleDim operator As StringDim result As Double' 获取用户输入num1 = InputBox("请输入第一个数字")operator = InputBox("请输入运算符(+, -, *, /)")num2 = InputBox("请输入第二个数字")' 根据运算符进行计算Select Case operatorCase "+"result = num1 + num2Case "-"result = num1 - num2Case "*"result = num1 * num2Case "/"If num2 <> 0 Thenresult = num1 / num2ElseMsgBox "除数不能为零"Exit SubEnd IfCase ElseMsgBox "无效的运算符"Exit SubEnd Select' 显示结果MsgBox "结果:" & resultEnd Sub```这个程序首先通过`InputBox`函数获取用户输入的两个数字和一个运算符。
然后,使用`Select Case`语句根据运算符执行相应的计算,并显示结果。
如果用户输入了无效的运算符或除数为零,程序会显示一个错误消息。
这个简单的VBA编程案例可以帮助用户快速创建自己的计算器应用程序,并在Excel中进行基本的数值计算。
VBA 编程常见实例

1、将excel汇总好的表,按字段拆分为多sheet的情况:如下图:代码如下:Sub cfs()Dim GSArr() As String '公司名称清单Dim Rca As Integer 'A列数据行数Dim i As IntegerDim Sn As StringSn = Rca = Columns("A:A").End(xlDown).Row ‘按第A列数据拆分,且第一行无合并单元格ReDim GSArr(1 To 1)GSArr(1) = Cells(2, 1)For i = 3 To RcaIf IsError(Application.Match(Cells(i, 1), GSArr, 0)) ThenReDim Preserve GSArr(1 To UBound(GSArr) + 1)GSArr(UBound(GSArr)) = Cells(i, 1)End IfNextIf ActiveSheet.AutoFilterMode = False ThenRows("1:1").AutoFilterElseIf ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllDataEnd IfFor i = 1 To UBound(GSArr)ActiveSheet.Cells.AutoFilter Field:=1, Criteria1:=GSArr(i)Sheets.Add After:=Sheets(Sheets.Count) = GSArr(i)Sheets(Sn).Cells.Copy ActiveSheet.CellsSheets(Sn).ActivateNextActiveSheet.Cells.AutoFilterEnd Sub2、将汇总的好的EXCEL表按字段拆分为多个工作薄代码如下:Sub CFGZB()Dim myRange As VariantDim myArrayDim titleRange As RangeDim title As StringDim columnNum As IntegermyRange = Application.InputBox(prompt:="请选择标题行:", Type:=8)myArray = WorksheetFunction.Transpose(myRange)Set titleRange = Application.InputBox(prompt:="请选择拆分的表头,必须是第一行,且为一个单元格,如:“姓名”", Type:=8)title = titleRange.ValuecolumnNum = titleRange.ColumnApplication.ScreenUpdating = FalseApplication.DisplayAlerts = FalseDim i&, Myr&, Arr, num&Dim d, kFor i = Sheets.Count To 1 Step -1If Sheets(i).Name <> "数据源" Then ‘待拆分的表sheet名为:数据源Sheets(i).DeleteEnd IfNext iSet d = CreateObject("Scripting.Dictionary")Myr = Worksheets("数据源").UsedRange.Rows.CountArr = Worksheets("数据源").Range(Cells(2, columnNum), Cells(Myr, columnNum))For i = 1 To UBound(Arr)d(Arr(i, 1)) = ""Nextk = d.keysFor i = 0 To UBound(k)Set conn = CreateObject("adodb.connection")conn.Open "provider=microsoft.ace.oledb.12.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName‘2013版连接字符Sql = "select * from [数据源$] where " & title & " = '" & k(i) & "'"Dim Nowbook As WorkbookSet Nowbook = Workbooks.AddWith NowbookWith .Sheets(1).Name = k(i)For num = 1 To UBound(myArray).Cells(1, num) = myArray(num, 1)Next num.Range("A2").CopyFromRecordset conn.Execute(Sql)End WithEnd WithThisWorkbook.ActivateSheets(1).Cells.SelectSelection.CopyWorkbooks().ActivateActiveSheet.Cells.SelectSelection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _SkipBlanks:=False, Transpose:=FalseApplication.CutCopyMode = FalseNowbook.SaveAs ThisWorkbook.Path & "\" & k(i)Nowbook.Close TrueSet Nowbook = NothingNext iconn.CloseSet conn = NothingApplication.DisplayAlerts = TrueApplication.ScreenUpdating = TrueEnd Sub3、将含有多sheet的一个工作表,按sheet名拆分为工作表代码如下:Private Sub 分拆工作表()Dim sht As WorksheetDim MyBook As WorkbookSet MyBook = ActiveWorkbookFor Each sht In MyBook.Sheetssht.CopyActiveWorkbook.SaveAs Filename:=MyBook.Path & "\" & , FileFormat:=xlNormal '将工作簿另存为EXCEL默认格式ActiveWorkbook.CloseNextMsgBox "文件已经被分拆完毕!"End Sub4,、将多个工作薄合并为一个多sheet的工作薄代码如下:Sub Books2Sheets()'定义对话框变量Dim fd As FileDialogSet fd=Application.FileDialog(msoFileDialogFilePicker)'新建一个工作簿Dim newwb As WorkbookSet newwb=Workbooks.AddWith fdIf.Show=-1 Then'定义单个文件变量Dim vrtSelectedItem As Variant'定义循环量Dim i As Integeri=1'开始文件检索For Each vrtSelectedItem In.SelectedItems'打开被合并工作簿Dim tempwb As WorkbookSet tempwb=Workbooks.Open(vrtSelectedItem)'复制工作表tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i)'把新工作簿的工作表名字改成被复制工作簿文件名,这儿应用于xls文件,即Excel97-2003的文件,如果是Excel2007,需要改成xlsxnewwb.Worksheets(i).Name=VBA.Replace(,".xls","")'关闭被合并工作簿tempwb.Close SaveChanges:=Falsei=i+1Next vrtSelectedItemEnd IfEnd WithSet fd=NothingEnd Sub5、将含有多个sheet的工作表内容信息汇总至一个sheet中Sub Combine()Dim J As IntegerOn Error Resume NextSheets(1).SelectWorksheets.AddSheets(1).Name = "Combined"Sheets(2).ActivateRange("A1").EntireRow.SelectSelection.Copy Destination:=Sheets(1).Range("A1")For J = 2 To Sheets.CountSheets(J).ActivateRange("A1").SelectSelection.CurrentRegion.SelectSelection.Offset(1, 0).Resize(Selection.Rows.Count - 1).SelectSelection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2)NextEnd Sub。
vba循环练习题

vba循环练习题在本文中,将为您展示一些VBA循环练习题。
VBA(Visual Basic for Applications)是一种用于创建宏的编程语言,广泛应用于Microsoft Office套件中的各种应用程序,如Excel、Word和PowerPoint等。
通过编写VBA代码,可以自动执行重复的任务,提高工作效率。
以下是一些常见的VBA循环练习题,供您练习和学习。
练习一:使用For循环输出1到10之间的偶数在Excel中新建一个模块,输入以下VBA代码:```Sub PrintEvenNumbers()Dim i As IntegerFor i = 1 To 10If i Mod 2 = 0 ThenDebug.Print iEnd IfNext iEnd Sub```运行此代码(按F5键),你将看到输出窗口中显示了2、4、6、8和10这五个偶数。
这段代码通过For循环遍历1到10的所有数字,使用If语句判断是否为偶数,如果是偶数则输出。
练习二:使用Do While循环计算1到100之间所有奇数的和在Excel中新建一个模块,输入以下VBA代码:```Sub CalculateOddSum()Dim i As IntegerDim sum As Integeri = 1sum = 0Do While i <= 100If i Mod 2 <> 0 Thensum = sum + iEnd Ifi = i + 1LoopMsgBox "1到100之间所有奇数的和为:" & sumEnd Sub```运行此代码(按F5键),将会弹出一个消息框显示1到100之间所有奇数的和为 2500。
这段代码使用了Do While循环,从1开始遍历到100的所有数字,如果是奇数则累加到sum变量中。
练习三:使用For Each循环遍历Excel工作表中的所有单元格在Excel中新建一个模块,输入以下VBA代码:```Sub IterateCells()Dim ws As WorksheetDim cell As RangeSet ws = ThisWorkbook.ActiveSheet '假设要遍历的是当前活动工作表For Each cell In edRange'在这里编写对单元格的操作,例如:'cell.Value = cell.Value * 2Next cellEnd Sub```运行此代码(按F5键),将会遍历当前活动工作表的所有单元格。
vba练习题

vba练习题VBA(Visual Basic for Applications)是一种用于自动化任务和定制应用程序的编程语言。
它广泛应用于Microsoft Office套件中的各种应用程序,如Excel、Word和Access等。
本文将为您提供一些VBA练习题,帮助您巩固和提升VBA编程技能。
1. 统计数字的和与平均值(Excel)在Excel中,有一个包含数字的单元格范围,请编写一个VBA宏,计算这些数字的总和和平均值,并将结果显示在工作表上。
解决方案:```Sub CalculateSumAndAverage()Dim rng As RangeDim cell As RangeDim sum As DoubleDim count As IntegerDim average As DoubleSet rng = Range("A1:A10") '将范围更改为您需要的范围sum = 0count = 0For Each cell In rngsum = sum + cell.Valuecount = count + 1Next cellaverage = sum / countRange("B1").Value = sumRange("B2").Value = averageEnd Sub```2. 计算阶乘(Excel)在Excel中,输入一个整数,请编写一个VBA宏,计算该整数的阶乘并在单元格中显示结果。
解决方案:```Sub CalculateFactorial()Dim num As IntegerDim result As Longnum = Range("A1").Value '输入要计算阶乘的整数result = 1If num >= 0 ThenFor i = 1 To numresult = result * iNext iEnd IfRange("B1").Value = resultEnd Sub```3. 寻找最大值和最小值(Excel)在Excel中,有一个包含数字的单元格范围,请编写一个VBA宏,找到这些数字的最大值和最小值,并将结果显示在工作表上。
VBA工作应用编程实例

VBA编程实例一、查找指定字符说明:指定字符存在,返回字符所在行号,否则显示空。
Sub 查找人员信息()Dim r1 As Integer, r2 As Integer, i As Integer, rng As Rangearr = edRangearr1 = edRangemyr = Sheet5.Range("C65536").End(3).RowSheet1.Activater1 = InputBox("请输入要查找的起始人员行号:")r2 = InputBox("请输入要查找的起始人员行号:")ReDim brr(1 To r2 - r1 + 1, 1 To 11)For i = r1 To r2Set rng = Sheet5.Range("C:C").Find(Val(arr1(i, 3))) '在C 列中查找符合要求的数据If Not rng Is Nothing Then '如果含有查找数据的单元格存在j = Sheet5.Range("C:C").Find(Val(arr1(i, 3))).Row '返回查找数据所在的行号y = y + 1brr(y, 1) = arr(j, 4) '姓名brr(y, 2) = arr(j, 44) '上市/未上市brr(y, 3) = arr(j, 1) '三级单位brr(y, 4) = arr(j, 2) '五级单位brr(y, 5) = arr(j, 13) '职位brr(y, 6) = arr(j, 45) '员工组brr(y, 7) = arr(j, 46) '内部员工分类brr(y, 8) = arr(j, 15) '身份brr(y, 9) = arr(j, 31) '职称brr(y, 10) = arr(j, 32) '工种brr(y, 11) = arr(j, 33) '技能等级Elsey = y + 1brr(y, 1) = "" '姓名brr(y, 2) = "" '上市/未上市brr(y, 3) = "" '三级单位brr(y, 4) = "" '五级单位brr(y, 5) = "" '职位brr(y, 6) = "" '员工组brr(y, 7) = "" '内部员工分类brr(y, 8) = "" '身份brr(y, 9) = "" '职称brr(y, 10) = "" '工种brr(y, 11) = "" '技能等级End IfNextRange("D" & r1).Resize(r2 - r1 + 1, 11) = brr End Sub二、用COUNTIF函数统计重复次数For i = 2 To s1Cells(i, n2 + 1) = WorksheetFunction.CountIf(Columns(n1), Cells(i, n2))Next三、消除辅助列内容Columns(n1) = ""End Sub四、返回数组中所查找字符的行号Sub 返回数组中所查找字符的行号()Dim ARRARR = Range("A1:A10")On Error Resume Next '如有错误,继续运行'On Error GoTo 0 '如有错误退出运行If Application.Match(1481845, ARR, 0) > 0 ThenMsgBox Application.Match("S", ARR, 0) '显示字符的行号ElseMsgBox "无此项", , "温馨提示"End Ifn = Err.NumberIf n = 0 ThenMsgBox Application.Match("S", ARR, 0) '显示字符的行号ElseMsgBox "无此项", , "温馨提示"End IfEnd Sub。
150个ExcelVBA编程实例

第一章Excel应用程序对象(Application对象)及其常用方法Application对象代表整个Microsoft Excel应用程序,带有175个属性和52个方法,可以设置整个应用程序的环境或配置应用程序。
示例01-01:体验开/关屏幕更新(ScreenUpdating属性)Sub 关闭屏幕更新()MsgBox "顺序切换工作表Sheet1→Sheet2→Sheet3→Sheet2,先开启屏幕更新,然后关闭屏幕更新"Worksheets(1).SelectMsgBox "目前屏幕中显示工作表Sheet1"Application.ScreenUpdating = TrueWorksheets(2).SelectMsgBox "显示Sheet2了吗?"Worksheets(3).SelectMsgBox "显示Sheet3了吗?"Worksheets(2).SelectMsgBox "下面与前面执行的程序代码相同,但关闭屏幕更新功能" Worksheets(1).SelectMsgBox "目前屏幕中显示工作表Sheet1" & Chr(10) & "关屏屏幕更新功能" Application.ScreenUpdating = FalseWorksheets(2).SelectMsgBox "显示Sheet2了吗?"Worksheets(3).SelectMsgBox "显示Sheet3了吗?"Worksheets(2).SelectApplication.ScreenUpdating = TrueEnd Sub示例说明:ScreenUpdating属性用来控制屏幕更新。
当运行一个宏程序处理涉及到多个工作表或单元格中的大量数据时,若没有关闭屏幕更新,则会占用CP U的处理时间,从而降低程序的运行速度,而关闭该属性则可显著提高程序运行速度。
VBA编程实操案例分析与解决方案

VBA编程实操案例分析与解决方案【引言】随着信息技术的迅猛发展,编程已经成为企业中不可或缺的一部分。
Visual Basic for Applications(VBA)作为一种强大的编程语言,被广泛应用于Microsoft Office软件的自动化和定制化开发。
本文将通过分析一些VBA编程实操案例,探讨相应的解决方案,帮助读者更好地理解和应用VBA编程。
【案例一】题目:快速生成Excel报表描述:某企业需要每月生成大量的Excel报表,包含数据提取、计算和图表等操作,且报表格式固定。
如何通过VBA 编程快速而准确地生成这些报表?解决方案:1. 根据报表的固定格式,设计好Excel模板。
2. 创建一个包含所有报表生成代码的VBA宏。
3. 使用VBA宏自动提取和计算数据,并将结果填充到模板中。
4. 添加图表生成的VBA代码,按照需求插入适当的数据图表。
5. 设置自动化程序,定期运行该VBA宏,生成报表,并保存到指定位置。
【案例二】题目:自动化处理Outlook邮件描述:某企业需要将收到的Outlook邮件按照特定规则进行自动分类和处理,如自动回复、转发等。
如何通过VBA编程实现这一自动化处理邮件的需求?解决方案:1. 打开Outlook应用程序,访问收件箱。
2. 使用VBA编写代码,通过设定的规则遍历收件箱中的邮件。
3. 根据邮件的主题、发件人、附件等信息,编写逻辑来自动分类和处理邮件。
4. 使用VBA代码实现自动回复或转发功能,根据需求自定义回复内容和转发对象。
5. 设置VBA宏的自动触发机制,以便在收到新邮件时自动执行。
【案例三】题目:自动化处理Word文档描述:某企业需要对大量Word文档进行一些共同的操作,如批量替换文本、格式调整等。
如何通过VBA编程实现这些自动化处理操作?解决方案:1. 使用VBA打开Word应用程序,访问指定路径下的文档。
2. 编写代码批量打开并遍历需要处理的文档。
3. 根据需求编写代码,实现批量替换文本的功能。
Excel常用VBA函数实用经典案例

Excel常用VBA函数实用经典案例ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII值。
二、代码:S UB示例_1_01()D IM MY N UM1%,MY N UM2%MY N UM1=A SC("E XCEL")'返回69MY N UM2=A SC("E")'返回101[A1]="MY N UM1=":[B1]=MY N UM1[A2]="MY N UM2=":[B2]=MY N UM2E ND S UB三、代码详解1、Sub示例_1_01():宏程序的开始语句。
2、Dim myNum1%,myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为Dim myNum1As 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。
这里返回小写字母e的ASCII代码101。
5、[a1]="myNum1=":[b1]=myNum1:把字符串“myNum1=“赋给A1单元格,把变量myNum1的值赋给B1单元格。
6、[a2]="myNum2=":[b2]=myNum2:把字符串“myNum2=“赋给A2单元格,把变量myNum2的值赋给B2单元格。