《基于Excel VBA的财务自动化》配套习题答案.docx

上传人:夺命阿水 文档编号:1488726 上传时间:2024-06-29 格式:DOCX 页数:20 大小:73.43KB
返回 下载 相关 举报
《基于Excel VBA的财务自动化》配套习题答案.docx_第1页
第1页 / 共20页
《基于Excel VBA的财务自动化》配套习题答案.docx_第2页
第2页 / 共20页
《基于Excel VBA的财务自动化》配套习题答案.docx_第3页
第3页 / 共20页
《基于Excel VBA的财务自动化》配套习题答案.docx_第4页
第4页 / 共20页
《基于Excel VBA的财务自动化》配套习题答案.docx_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《《基于Excel VBA的财务自动化》配套习题答案.docx》由会员分享,可在线阅读,更多相关《《基于Excel VBA的财务自动化》配套习题答案.docx(20页珍藏版)》请在课桌文档上搜索。

1、第1章VBA入门知识I.动手练习:关闭所有已打开的Excel程序,然后新建并打开一个CXCCl文件,在该文件的B3:M5区域内填入任意数字。在该文件内录制宏,宏的名字为“format。录制以卜操作: 1)地置Al:Ml为合并并居中,行高3().内容垂宜居中,字号20, 2)设置A2:M2填充色为淡蓝色. 3)设置B3:M5数字格式为“会计专用。(4)在A6输入“Total:,在第六行,B到M每一列进行求和。 5)设置A6:M6字体加粗,上边框线为双线。 6)在输入“GrandToIaI:,在M8对第六行进行求和“ 7)设置第八行字体加粗.6yoff0*&1.sumEndSubDo循环:Subm

2、ysum2()Dim1.suas1.ong,iAs1.ongDoUhileiIOl1.sub=1.SUm+ii=i+11.oopMsgBox*l100A06wylP,*&1.sumEndSub第3章ExcelVBA的重要概念1.Excd中有哪些常见的对象?它们之间的层次结构是怎样的?有APPIiCaIion对象、WOrkbOok对象、Worksheet对象、Range对象。EXCCl应用程序只有个APPIiCatiOn对象,个APPliCatiOn对象中可能有多个工作簿对象,工作簿中可能包含多个工作表对以,而工作表中又包含着多个单元格对象.2.基于对象集合的概念,可以对workbook和WOr

3、kShCet对象采用两种基本的表示方法,试举例说明。1)对象集合(对象名),如WorkSheetSCSheeII)表示所有工作表中名为Sheetl的那张工作表:2)对象集合(对象索引号)。如WOrkShCCM2)表示排在第2位的那张工作表。3 .对象变量与其他变量在使用上有什么不同?1)时象变量在赋值之前,必须先声明,如DimmgaSRange:(1)给对象变量赋值.必须加Sel关键字,如Setmg=Range(Al:C2):(3)程序结束前,最好用语句“Sei对象变量名=Nothing”手动择放对象变量内存空间。4 .简述对象的属性、方法、事件。属性是对象的一种特征,每个对象都可能有多个属性

4、。在VBA代码中般通过赋值语句的方式来设置对型的属性值,对您和属性之间同样用英文符号连接,对象在前,属性在后.方法是作用于对象的悚作,每个对象都可能有多个方法。如果说属性由于是对象的特征,因而是名词形式的话,那么方法就可看作是动词形式,例如创建、删除、关闭、插入、激活、计算、身制、查找等。对象和方法之间也用英文句点连接。对象的事件是当一定主体对象的特定事件发生后,就会触发宏过程的自动启动运行。VBA可以响应许多事件,而这些事件又是由用户或者系统本身所触发的。对于对象而言,事件就是发生在该对象上的事情或消息。系统为每个对象预先定义好了一系列的事件,例如,CIiCk(单击)、DbICliCk(双击

5、)等.第4章VB操作主要对象1 .什么是Application对象?Application对象的worksheets和Sheets属性有什么区别?ActivcWorkbook和thisvorkbook属性有什么区别?在Excel对象模型层次结构最顶端的是APPliCaliOn对彖,代表Excel应用程序本身。WOrkSheelS是活动工作簿中所有WCrkSheel对象,不包括宏表等:Sheet5当前活动工作薄中所有ShCCl对象,包括宏表等,二者可能一样,也可能不一样。ActivcWorkbook是当前活动工作簿,Ihisworkbook是运行当前宏代码的工作簿,二者可能一样,也可能不一样。2

6、 .请用Yba代码表示以下描述:(I)关闭名为“测试”的工作簿 2)保存代码所在的工作簿 3)选择标签名称名为“1月的工作表 4)删除第2张工作表 5)新建一张工作表,放在最后位置答:.orkbooks(测试).CloseThisWorkbook.Saveworksheets(1月).selectforksheets(2).DeleteIorksheets.Addafter:=Iorksheets(Worksheets,count)3 .请用2种或以上的方法引用:(I)单元格Al: 2)单元格区域Al:C3; 3)第2行: 4)第2列1)ra11e(“al”),cells(1,1)(2) ra

7、nge(*1:C3).range(*al).resize(3,3)(3) Rows2:2*).Rows(2),Range2=NothingEndSub第5章函数1 .在Vba中,如何调用工作表函数?如何调用VBA内巴函数?工作表函数主要通过两种方式谢用:第一种为利用APPliCation对象调用,使用特点是在函数名前加“WorksheetFunction”的前缀:第二种为利用字符吊直接在单元格中写入函数。调用VBA内置函数可以在前面加上:VBA.函数名,也或者直接调用写函数名.2 .什么是自定义函数?自定义函数的基本格式是怎样的?VBA用户可以自行定义一个具有特殊功能的函数,即自定义函数,其基

8、本格式如卜;Function南数名(变量)Endfunction3 .与Excel内置函数相比,自定义函数的使用中有什么主要问题?可以采用什么方法予以解决?自定义函数值不能自动更新,这一点与Excel内置函数不同.解决自定义函数自动更新的方法主要有两种:一是在工作表中选择任何两列进行剪切和粘贴操作,二是在函数体内第行加上语句ApplicalionNoIaliIe将函数定义为易失性函数。4 .试写个自定义函数,如果输入参数是“男”,则返回“先生”:如果输入参数是“女”,则返回女士”,FunctionchstrAsString)Ifstr=男Thench=先生.Elsech女士EndIfEndFu

9、nction5 .试写个自定义函数,将“4202031988()8089201”格式的身份证号码中的生日信息提取出来,并以“1988/8/8”的格式返回.Functionrqzh(strAsString)rqzh-DateSerial(1.eft(str,4),Mid(str,5,2).Right(str,2)EndFunction第6章对账业务1 .在银企对账宏中是如何实现A列与C列数据比对的?第一步,将第1列(A列)的第1个数据,即单元格CeHS(3,I)数据,与第3列(C列)第1个数据,即单元格CeHS(3,3)数据,进行比对。如果相同,即Celk(3.1)=CeIk(3.3),则停止比

10、对,并同时删去单元格Cell(3,l)Cell(3,3)数据.第二步,如果第一步比对不成功,也就是单元格CdIS(3,1)与CCllS(3.3)的数据不同,即接若将第1列的第1个数据顺次与第3列第2个数据,即单元格CeHS(4.3)数据,进行比对。如果相同,则停Ih比对,并同时删去单元格CeHM3.1)和CeHS(4,3)数据。如此进行,直到将第I列的第1个数据与第3列的最后I个数据,即单元格CeH(100oo,3)数据,比对完毕。2 .为什么在记录之间存在空格时,For.Ncxt循环语句的循环终值不能设为变量值?如果记录之间有空格,则循环会在第个空格处终止。3 .6.2.1小节VBA代码中的

11、ar=Range(al).CUITentRCgion”可以替换为“akRange(一).USCdRangC”么?不可以,因为UscdRangc是Worksheet对象的属性,range对象没有。4 .若本章6.2.1小节VBA代码中必须使用USedRange属性,应该怎么修改?改了仃缺点?将“ar=RangeeaI).CUrrentRegion”替换为ar=Sheet1.UsedRangeKP11缺点:由于USCdRangC底性返回的是工作表中已使用的所有单元格困成的最小矩形区城,所以当工作表中数据区域以外的堆元格有改动,数组ar中就会出现一些空值,浪费了内存空间。第7章统计报表的批量生成与分

12、发1 .按顺序删除工作表时,为什么要从后往前删除?删除一张工作表之后,所有的ShCCt在顺序上都依次前移了一位,若按顺序从前往后粗除,会造成漏删,并可能引起“下标越界”的问题。2 .简述对报表设理保护的操作步骤. 1)先锁定整张工作表的单元格。 2)取消锁定要输入数据的单元格或区域。=irow1行号加1NextEndSub第8章日记账数据拆分到多表1 .在自动化业务处理中,如何在代码中根据对缴处理的不同状态选择不同的进一步处理方式?引入个状态变量,根据对象处理的不同状态给状态变量赋不同的值,进而利用if语句根据状态变量值的不同进入不同的代码块.2 .在拆分数据到部门表的时候,如果代码中不指明工

13、作表名称,会发生什么情况?请选择不同的工作表进行测试。无论在哪张工作表界面启动运行SUb过程,都无法得到正确的拆分数据结果,原因是SUb过程运行中会在不同的工作表间切换,若不指明工作表名称,就无法指向正确的工作表数据.3 .试编写一个Sub过程,将拆分到不同工作表的数据提取合并到一个表格中。Subhcbi11()Dimi,jAsIntegeri是数据源我的最后一行,j是目标表(数据衣)的最后行DimshtAsWorksheet先要删除所有数据Sheet1.Range(*al:f65536*).ClOarContents发制表头Sheet2.Range(*:8*).CopySheetl.Rang

14、e(al)Sl制数据ForEachShlInSheetsIfsht.NaaeO数据Then1 =sht.RangeC*a65536*).End(xlip).Rowj=Sheetl.RangeCa65536*r).End(xlUp).Rowsht.Range(*a2:f*hi).CopySheet1.Range(*a*&j*1)EndIfNextEndSub第9章跨文件汇总报表I、请简述Dir函数的作用及使用特点.Dir的作用是返回一个String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。Dir(PathnanIe)仅返回匹配pathname的第个

15、文件名,若想得到匹配PaIhnaEe的其它文件名,再一次调用Dir,且不敷使用参数.如果已没有合乎条件的文件,则Dir会返回一个零长度字符串()。一旦返回值为零长度字符串,并要再次谢用Dir时,就必须指定Pathnamc,否则会产生.错误。2 .请使用Dir函数号一个SUb过程,用以判断与代码文件所在的文件夹中,有没有名为tesi”的excle文件.PublicSbfiIeNaneTestODimmyFileNamesString指定带完整目录的文件夹名称UyFileName=ThisWorkbook.Path&*test.xls*If1.en(DirQyFiIeNamc,vbDirector

16、y)0ThenJfDir(yFiIeName)OThenMsgBox.该文件存在.ElseMsgBox”该文件不存在“EndIfElseMsgllox”所指定的文件夹或文件不存在EndIfEndSub3 .在路径下有三个excel文件,名称分别为company1company!%company?,文件内的数据格式均如下图左所示。图右是在另i路径下的汇总文件。现需在不打开company1xComPany2、COmPany3文件的情况卜,在汇总文件中得到统计数据,试写一个SUb过程实现这要求。iB&aW金融1万元)Za203AAB154R&CJ公旬QqAalt收入(万元mc*v25Sub子公司普业

17、合计()FOri=IT03Sheets(ActiveSheet.Name).Ce11s(4i,2).FormulaRlCl-=D:1companyAii.xlsShcetl,!Rf&(-2-i)&C-Nexti以上3行代码,循环调用D盘T文件夹COmPany1、ComPany2、coany3文件Sheetl工作表B2单元格中的数据,并从节前工作表B5单元格开始向下依次列出.EndSub4 .试写一个SUb过程,可以在代码所在文件中,将指定文件夹中所有excel文件(数量不确定的所有工作表(数量不确定)的前20行前10列的数据,分别求和放入代码所在文件的对应单元格中。SubtestDimcFil

18、e$.Cpalh$,ShAsWorksheet,nRowSetSh=ActiveShcctDim三ydirAsStringApplication.ScreenUpdating-FalseApplication.EnableEvents=FalseFori=1To20*行范围ForJ=1To10,列范困Sh.Cells(i,j)=NextjNextiePath=ThisWorkbook.Path&数据源cFile二Dir(cPathixls*)找寻第一个表格DoWhilecFileOr开始循环,Workbooks.OpenePathhcFile打开表格WithctiVeWorkbookSetwk

19、=ActiveWorkbook.SheetsFori-1To20Forj=ITo10Fork=iTowk.CountSh.Cells(itj)Val(Sh.Cells(i.j)Val(.Sheets(k).Cells(i.j)NextkNextjNexti.CloseEndWithcFile=Dir查找F一个表格1.oopApplication.EnableEvents-TrueAppliction.Screcnlpdati11=TrueMsgBox提取汇总完毕!,60KMly,菜鸟制作.EndSub5 .试写一个Sub过程,把指定文件夹下所有EXCd文件的数据记录全部汇总到代码所在文件中。S

20、ubtest()DimmyPathS,myFile$.AKAsKerkbOok,aRo,.tRowApplication.ScreentIpdatine=FalsemyPath=ThisWorkbook.Path&分表V冻结算幕,以防屏幕抖动把文件路径定义给变队myFiIe=Dir(myPath&*.xls,)DoWhilemyFiIeO”If三yFileOThisWorkbook.NameThen依次找J指定路径中的*XlS文件当指定路径中有文件时进行循环SetAK=Workbooks.Open(myPath&myFile)打开符合要求的文件nRow=AK.Sheets(I).Range(a

21、65536,).End(xlUp).RowlRow=ThisWorkbook.Sheets(I).RangeC,a65536).End(xlUp).Row-1AK.Sheots(I).Range(a3zk*&aRow).CopyThisUorkbook.Sheets(I).Range(*a*ktKow)Iorkbooks(yFi1e),CloseFalseEndIfmyFi1e-Dir1.oop关Hi源工作簿,并不作修改我寻下一个*.x】s文件Application.ScreenUpdating-TneMsgBox化总完成,WffYi-!,61,提示.冻结屏够此类语句般成对使用第10章数组及其

22、财务应用1 .以下语句是不是合法的数组声明?如果是,声明的数组有些什么特点?DimCitieS(3To6)AsInteger是。上面的语句声明了一个带有四个整数型成员的一维数组.数组名称后面括号里的数字明确了数组的下界(3)和上界(6)。该数组的第个成员编号为3,第二个为%第三个为5,以及笫四个为6.2 .对数组赋值有哪些方式?试举例说明.(D对其元素赋值,如:Arrt1)=3;A(3)=82)用循环的方式赋值,如:Fori=1to5Arr(i)=iNeXt(3)用Range对象给数组赋值,如:arr=Range(al:a2)3 .请说明以下语句声明r什么维度的数组,具有什么特点?(1) di

23、marr(5):表示声明一个具有6个元素一维横向数组,其数据类型是变体变量variant;2)dimarr(4)asbyte:表示声明个具仃5个元素的横向数组,其数据类型为byte;(3) dimarr(lto3)asSlring:表示声明一个具有3个元素的一维横向数组,数据类型是SIring.其第一个元素索引号为1:0Then11=11+1For1=1To5br(n,1)=ar(i,1)Next1EndIfNextiRange(c3.Cells(mh,5).C1eara3.Resize(n,a3.Resize(n,a3.Resize(n.a3.Resize(n,l*ndSub5)=br5).

24、Rowlleight=205).HorizontalAlignment=xlCenter5).Borders.1.ineStyle=x!Continuous5.谙使用数组写一个SUb过程,计算每一行的平均值并将其填入G列对应的单元格。/ABCDEFGA客户BN户CX户DX户E客户P客户平均依2491625然3281832SO724312274875108541636641001446S2045啦12S180762454%ISO21687286311217S2S2983272)28200288109368114422S324PublicSubtestODimmyArrayAsVariantDim

25、islxng.js1.ong.yvg将中.元格区域数据保存到数组myArray=Range(*A2:F10*).Va1ueReDimmavg(lToUBound(ayrry)sSingle计算平均值,并保存到一个维数组中Fori=1.BoundGnyArray)To1.Bound(myArray)yAvg(i)=Round(WorksheelFunction.Average(myArray(i.1),m)rray(il2),myArray(i,3),myArray(i,1),myArray(i.5),myArray(i,6),2)NextiRangeG)=平均值将计算出的平均值输入到单元区域R

26、ange(*G2:G10*)=UorksheetFunction.Transpose(myAvg)EnclSub第11章发票凑数1 .在发票凑数时,为什么要先将数据读取到数组中?因为我们要通过For循环将发票所有排列组合罗列出来,需要对数据进行频繁的读取,若直接使用range读取得要访问硬盘,速度较慢,而对数组的读写直接在内存进行,速度很快.2 .在发票凑数时,使用多层嵌套For循环有什么缺点?首先,FOr循环结构是固定的,For循环有几层则总金额必须由几张发票组成,不能将总金额的所有发票组合形式都找出来。其次,组合结果中张发票的金额会被多次使用,且发票金额所在位置不同,程序都将其视为不同组合

27、,与实际情况不符。3 .在一个过程中调用另一过程,使用什么关键字?Call关篌字4 .什么是递归?递归过程的两个必要条件是什么?递归就是程序在运行的过程中自己调用自己.条件I:必须给出递归终止的条件与结果。条件2:必须给出递归的表述形式。5 .试编制VBA代码用递以求第n个斐波那契数,斐波那契数列为F(O)=OjF(I)=I,F(n)=F(11-I)+E(n-2)n2o求第n个斐波那契数,SubFibo(nASInteger)过程的返回价为第n个斐波那契数If11-0ThenFibo=0ElseIfn=1ThenFibo二1Else:Fibo=Fibo(n-1)+FibO(n-2)EndIfE

28、ndSub第12章字典及其财务应用1 .VBA中字典有哪些方法?哪些属性?方法语法作用AddObjeCI.Add(key,item)向DiCtiCnary对象中添加一个关堆字J目对:如果要添加的key已经存在,那么将导致报错Keysobject.Keys返回一个包含Dictionaiy对象全部关键字的一维数加,卜限为0.限为DiCtiOnary对象的条目数-1Itemsobjcc.ltcms返【1一个-维数组,其中包含DiCtiOnary对象的所有项目ExistsObjeC1.EKi$1Wkey)如果DiClicnary对象中仃该key则返【可Hue.看则返3IHscRemoveobjl-个D

29、iciionary时象中的条目数,Keyobject.Key(ikey)=newkey设置一个key,其中卷数ikey是被改变的key值,NeWkCy是用以背换的新值.如果在改变一个key时没有发现该key,那么将创建一个新的key并且其相关联的item被设置为空Itemobjcxt.Ilem(key)(=newiicm)设置或者返回Dictionary对象指定key的ilemoCompareModeobjcct.CompareModc-compare设置或者返回在Dictionaiy对象中进行字符串关迸字比较时所使用的比较模式.compare就是一个代表比较模式,可以使用的例是0(二进制)、

30、1(文本)、2(数据摩)。2 .字典的Keys方法和items方法返回的数据具有什么特点?Keys方法和items方法都可返回一个卜界为O的一维数组。3,请用字典编写个SUb过程,以对话框的形式顺序显示I-I(X1.Subtest()DimdieAsObject,iAs1.ongSetdie=CreateObjectCpScripting.Dictionary*)FOri二1To100die.Addi,iNextMsgBoxJoin(dic.keys,Setdie=NothingEndSub4 .试用字典编写一个SUb过程,在工作表的A列畋序显示1100OO,在B列以逆序显示。SubIcslO

31、DimdieAsObject,iAsl.ong,arrSetdie=CreateObject(*Scripting.Dictionary*)Fori=1To10000die.Addi,10001-iNextarr=WorksheetFunction.Transposetdic.keys)al.Resize(1.Bound(arr),1)=arrarr=WorkshcetEunction.Transpose(die.items)bl.Resize(1.Bound(arr),1)=arrSetdie二NothingEndSub5 .试用字典统计圆周率前500位中各数字出现的缴率并显示在工作表的前两

32、行。Subtest()ConstPiAsString=3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803182534211706798214808651328230664709384460955058223172535940812848111745028410270193852H05559641622948954930381964128810975665933446!2847564823378678316527120190914564856692346034861045

33、4326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530518820166521384M695194151160913305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912”DiniAs1.ong,tempAsString,dieAsObjectSetdie=CreateObject2.Resized,die.Count)=die.itesSetdie-NothingEndSub第13章窗体与控件1 .窗体的常用属性有哪些?Caption属性和名称属性有什么区别?窗体的常用属性有Caption属性、1.cft属性、Top属性、Height属性、Width属性、EnabIed属性。CaPIiOn属性用于设置窗口的标题,名称属性用于设置对象的名字,名字作为对象的标识而被引用.2 .若窗体Frml中有一个命令按钮CmdI,则窗体和命令按钮的Click事件名称为什么?窗体的Click事件名称为Frm1.Click()命令按钮的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号