《2021年2021年Excel高级应用VBA实验题目解析.docx》由会员分享,可在线阅读,更多相关《2021年2021年Excel高级应用VBA实验题目解析.docx(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品word 可编辑资料 - - - - - - - - - - - - -Esy021. 选定 sheet1 工作表,合并 A1: C1 单元格,并输入“ TEST”,背景颜色设置为浅黄色,字体颜色设置为红色,字体大小设置为10 磅;Sub Macro1() Macro1 Macro 宏由 xu 录制,时间 : 2021/3/26 Application.Left = 201.25Application.Top = 61.75 Range(A1:C1).Select With Selection.HorizontalAlignment = xlCenter.VerticalAlignment
2、 = xlBottom.WrapText = False.Orientation = 0.AddIndent = False.IndentLevel = 0.ShrinkToFit = False.ReadingOrder = xlContext.MergeCells = False End With Selection.Merge Range(A1:C1).SelectActiveCell.FormulaR1C1 = TEST Range(A1:C1).SelectWith Selection.HorizontalAlignment = xlCenter.VerticalAlignment
3、= xlCenter.WrapText = False.Orientation = 0.AddIndent = False.IndentLevel = 0.ShrinkToFit = False.ReadingOrder = xlContext.MergeCells = True End WithWith Selection.Font.Name = 宋体 .FontStyle = 常规.Size = 10.Strikethrough = False.Superscript = False.Subscript = False.OutlineFont = False第 1 页,共 14 页 - -
4、 - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -.Shadow = False.Underline = xlUnderlineStyleNone.ColorIndex = 3 End WithWith Selection.Interior.ColorIndex = 6.Pattern = xlSolid.PatternColorIndex = xlAutomatic End WithEnd Sub2 在 sheet1上创建“窗体”命令按钮并指定“宏”代码sy22 ,补充代码完成:从键盘输入一个整数n,输出如下图形;其中每个“* ”在单
5、元格中水平和垂直方向都要求居中;nSub sy22()Dim n As Integer、 i As Integer、 j As Integer第 1 空n = InputBox( 输入行数 )从键盘输入数据并存放到变量n Sheets(Sheet1).Cells.ClearContents清除 sheet1工作表中单元格的内容 For i = 1 To n循环打印,输出n 行*For j = 1 To 2 * i - 1 每行输特别数( 2*i-1) 个* ,如:1,3,5 个Cells(i、 n - i + j).Value = * Next jNext iCells(1、 n).Activ
6、ate激活 A 列 N 行的单元格ActiveCell.CurrentRegion.Select 选定单元格所在的当前区域 With Selection.Font.Size = 16 字体大小.Font.Bold = True字体加粗.HorizontalAlignment = xlCenter水平方向居中.VerticalAlignment = xlCenter垂直方向居中第 2 页,共 14 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -End With End subEsy031. 调用 EXCEL 的 RAND 和
7、 INT 内部函数,在 A 列的 1 10 行输入序号 1 10 , 在 B 列的 1 10 行填入 0 1 之间的随机数, 在 C 列的 1 10 行填入两位正整数, 最终在 C 列的 11 行求出该列的最大数(调用MAX 函数);请参照程序上下文补充完整的语句Sub sy31()Dim k As IntegerDim a As String、 b As String、 c As String For k = 1 To 10a = A & k b = B & k c = C & kRange(a).Value = k在 A 列的 1-10 行输入序号 1-10Range(b).Value=
8、Rnd()在 B 列的 1-10 行填入 0-1 之间的随机数Range(c).Value= 10 + Int(90 * Rnd()在 C 列的1-10 行填入两位正整数Next kSet myr = Worksheets(Sheet1).Range(C1:C10)Range(c11) = WorksheetFunction.Max(myr)在C 列的 11 行求出该列的最大数(调用MAX函数)End SubEsy04输入一个字符,判定该字符为字母字符.数字字符仍为其他字符,并用Msgbox 函数输出结果;分析:用IF 语句实现Sub pdzi()Dim strC As String定义变量
9、strC 为字符型strC = InputBox( 请输入字符 )第 1 空,利用 InputBox 函数输入字符放到 strC 中IfUCase(strC) = AAndUCase(strC) = 0 And strC = 90第 2 空ActiveCell = 优 Case Is = 80ActiveCell = 良Case Is = 70 ActiveCell = 中Case Is = 60 ActiveCell = 及格Case Else 第 3 空ActiveCell = 不及格 第 4 页,共 14 页 - - - - - - - - - -精品word 可编辑资料 - - - -
10、 - - - - - - - - -End Select End Sub4 :打开 Excel 工作簿 EC404.xls ,在 A2 , B2 和 C2 单元格输入a、 b、 c的值,单击最大值按钮,在 D2 显示这三个数的最大值;解题思路:假设三个数中的第一个数为最大值,用这个假定的最大值分别跟剩下的两个数比较,假如假定的最大值小于其它两个数,就最大值为较大的那个数;Sub max()Dim a As Double、 b As Double、 c As Double、 max As Double a = Val(Cells(2、 1)b = Val(Cells(2、 2)c = Val(C
11、ells(2、 3) max = a 第 1 空If max b Then max = b 第 2 空End IfIf max = 0第 1 空 sum = sum + data第 2 空 k = k + 1第 3 空data = InputBox(请输入数据 :) LoopMsgBox 一共输入了 & k & 个数; _& vbCrLf & 其和为 & sum & 其平均值为: & sum / kEnd Sub试验 3 : 编写程序运算SUM=1+1*2+1*2*3+1*2*3*100的和;解题思路:该题用DoLoop 结构实现累积与累加,目标为求100 项的累加,而每哪一项一个累积式;Su
12、b multi()Dim sum As Double Dim i As Integer Dim t As Double第 6 页,共 14 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -i = 1: t = 1: sum = 0Do While i = 100 第 1 空t = t * i第 2 空sum = sum + t第 3 空i = i + 1第 4 空LoopMsgBox (1+1*2+1*2*3+.+1*2*3*.*100= & sum)End Sub试验 4 :打开 Excel 工作簿 E504.xls ,编
13、写程序, 将当前工作表中第1 行从指定位置m 开头的 n 个数按相反次序重新排列;例如,原数列为:1, 2 ,3 , 4, 5, 6 ,7 ,8 , 9, 10 , 11, 12 , 13, 14, 15,16 ,17 ,18 ,19 ,20 ;从第 5 个数开头,将10 个数进行逆序排列,就 得到新数列为:1 ,2 , 3, 4, 14 , 13, 12, 11, 10, 9 , 8, 7, 6,5 , 15 , 16, 17, 18 , 19 , 20;Sub 逆置()i = Cells(6、 12) 起始位置j = i + Cells(7、 12) - 1 第 1 空,终止位置Do Wh
14、ile i = o And a = Cells(1、 s) Then Exit For 第 4 空,退出本层循环Cells(1、 s + 1) = Cells(1、 s)第 2 空,移动数据Next sCells(1、 s + 1) = a 插入数据r = r + 1第 3 空 ,修改目标数据区长度Next 第 5 空End Sub试验 3 : 在“ D:Esy06 ”文件夹下打开文件EC603.xls ,“求任意区域数值总和”按钮指定到名称为“ sumSelection”的宏,补充宏代码,使之完成如下功能:运算工作表中任意选定区域的数据总和,并用信息提示对话框将结果输出,完成后按原文件名储存
15、在原位置Sub sumSelection()For Each x In Selection第 1 空,”For #1#In Selection“ s = s + x第 2 空Nextmsgbox 该区域的总和为 :&s 第 3 空,”msgbox 该区域的总和为 :# “End Sub试验 4 :在“D:Esy06 ”文件夹下打开文件EC604.xls ,“从分班” 按钮指定到名称为 “ Student ”的宏,补充宏代码,使之完成如下功能:按次序(成果从高到低)对同学进行分班,每个班 25 名同学,每个班储存在一个新的工作表中;完成后按原文件名储存在原位置Sub Student() n
16、 = 0While Not (IsEmpty(Cells(n + 4、 1) n = n + 1 第 1 空Wendm = Application.WorksheetFunction.RoundUp(n / 25)、 0)bs = 1 DoSheets.AddActiveSheet.Name = Str(bs) + 班 Cells(1、 1) = 英语 + Str(bs) + 班名单 Cells(2、 1) = 学号Cells(2、 2) = 姓名Cells(2、 3) = 成果 For i = 1 To 25For j = 1 To 3 第 2 空Cells(i + 2、 j) = Shee
17、ts(sheet1).Cells(i + 3 + (bs - 1) * 25、 j) 第 3 空Next Next第 8 页,共 14 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -bs = bs + 1 第4 空 , #4#Loop While bs = m 第 5 空, #5#End SubEsy07试验 1 : 打开文件E701.xls ,“一维数组求极值”按钮指定到名称为“一维数组求极值”的宏,补充宏代码,使之完成如下功能:输入10 个数,将这10 个数分别放在第1 行的 10 个单元格中,求出这10 个数的最大值
18、和最小值放在相对应的单元格中;Sub 一维数组求极值 ()Dim E(1 To 10) As Single第 1 空,定义一个名称为E,元素个数为 10 的一维数组Dim max As Single、 min As Single MsgBox 输入的 10 个数据如下: For i = 1 To 10For 语句的作用为先将输入的数据放到数组中,然后再将数组中的数放到对应单元格里E(i) = InputBox( 请输入数据 :) 第 2 空Cells(1、 i) = i第 3 空Next imax = E(1): min = E(1) For i = 2 To 10If max E(i) Th
19、en min = E(i) 第 5 空 Next iCells(2、 2) = max Cells(3、 2) = minEnd Sub试验 2 : 打开文件E702.xls ,“一维动态数组的使用”按钮指定到名称为“一维动态数组的 使用”的宏,补充宏代码,将整型动态数组X 声明为具有20 个元素的数组,并给数组的全部元素赋值1 ;Sub 一维动态数组的使用 ()Dim X()As Integer第 6 空ReDim X(1 To 20)第 7 空For I = 1 To 20 X(I) = 1 第 8 空Cells(I、 1) = X(I)Next I End Sub试验 3 : 打开文件E
20、703.xls ,“统计英语成果”按钮指定到名称为“统计英语成果”的宏,补充宏代码, 使之完成如下功能:第一输入该班人数,然后再分别输入该班同学的英语成果并将英语成果依次放在第1 行,将大于平均值的数据以红色字体显示出来;Sub 统计英语成果 () Dim E() As Single Dim n As IntegerDim s As Single、 aver As Single第 9 页,共 14 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -n = InputBox( 请输入该班的人数 )ReDim E(n)第 9 空M
21、sgBox 输入的 & n & 个数据如下: For i = 1 To nE(i) = InputBox( 请输入英语成果 :)Cells(1、 i) = E(i)s = s + E(i)第 10 空Next iaver = s / n第 11 空MsgBox 将大于平均值的数据以红色字体显示出来: For i = 1 To nIf aver z And y + z x And x + z y Then 第 5 空,判定三条边能否组成三角形area = (c - x) * (c - y) * (c - z) 1 / 2 第 6 空Elsearea = 这三条边不能组成三角形!第 10 页,共
22、14 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -End IfEnd Function试验 3 :打开文件E803.xls ,补充宏代码,完成如下功能:将当前工作表中第1 行从指定位 置 m 开头的 n 个数按相反次序重新排列;例如,原数列为:1 ,2 ,3 ,4,5 ,6 ,7 ,8,9 , 10 ,11 ,12 ,13 , 14, 15 ,16 ,17 ,18 , 19, 20;从第 5 个数开头,将10 个数进行逆序 排列,就得到新数列为:1, 2, 3, 4, 14, 13 , 12, 11, 10, 9 , 8
23、, 7, 6 ,5 , 15, 16 ,17 , 18, 19, 20;Sub 逆置()i = Cells(6、 12) 起始位置 j = i + Cells(7、 12) - 1 终止位置Do While i = 0 And a = 1DO 语句实现字符串的反向,基本思路为从右边一个一个的截取字符放到给定变量中, 变量中的字符串即为反向字符串tempStr = tempStr & Mid(xStr、 I、 1)第 15 空 I = I - 1LoopyStr = tempStr第 16 空End SubSub 字符反向输出 ()Dim s1 As String、 s2 As Strings1
24、 = InputBox(请输入字符串: )Call Invert(s1、 s2)第 17 空MsgBox s2 End SubEsy11 期中考1. 请打开试验文件夹下的sy01.xls 文件,完成如下操作:编程序,打印九九乘法表如下;其中乘数和被乘数所在单元格字符格式为加粗,水平居中;Sub jiujiu()Dim i As Integer、 j As Integer For i = 1 To 9Cells(1、 i + 1).Value = i 第 1 空, #(1)#.Value = i生成乘法表的第1 行Cells(i + 1、 1).Value = i 第 2 空, #(2)#.Va
25、lue = i生成乘法表的第1 列 Next iRows(1).Font.Bold = True第 3 空#(3)#.Font.Bold = TrueRows(1).HorizontalAlignment = xlCenterColumns(1).Font.Bold = True第 4 空#(4)#.Font.Bold = True Columns(1).HorizontalAlignment= xlCenter 第 5 空 Columns(1).#(5)# = xlCenter第 12 页,共 14 页 - - - - - - - - - -精品word 可编辑资料 - - - - - -
26、- - - - - - -For i = 1 To 9For j = 1 To i 第 6 空 For j = #(6)# Cells(i + 1、 j + 1).Value = i * j 第 7 空#(7)# = i * jNext j Next i End Sub2.请打开试验文件夹下的sy02.xls 文件,完成题目要求的操作;Sub 男生分班 ()Sub 男生分班 () Dim k As IntegerFor Each sht In Worksheets检查“男生”工作表为否存在,假如存在就删除If sht.Name = 男生 Then Sheets(男生).DeleteSheets
27、(男生).#( 1)#NextSheets.Add建立男生工作表及表头信息 Range(a1:d1).Merge#(2)#.MergeActiveSheet.Name = 男生#(3)# = 男生活动工作表的名字为“男生”Range(A1:D1).Value = 2000 级男生信息表 Range(A1:D1).#( 4)#= 2000 级男生信息表 Range(A2).FormulaR1C1 = Sheets(同学成果 ).Range(A3).Value Range(B2).FormulaR1C1 = Sheets(同学成果 ).Range(B3).ValueRange(C2).Formul
28、aR1C1 = Sheets(学生成果 ).Range(C3).ValueRange(D2).FormulaR1C1 = Sheets(同学成果 ).Range(D3).Value- 从“同学成果表”中提取男生成果并赋值给“男生”工作表- k = 3k 为男生表中每位同学记录的插入位置For i = 4 To Sheets(同学成果 ).Range(a65536).End(xlUp).Row 从第 4 行到工作表最终一行,读取同学成果表全部数据If Sheets(同学成果 ).Cells(i、 3).Value = 男 Then假如性别为男,就提取数据For j = 1 To 4j 为同学数据的四个列Cells(k、 j)= S