Excel高级应用VBA实验题目解析Word格式.docx

上传人:b****6 文档编号:19152735 上传时间:2023-01-04 格式:DOCX 页数:19 大小:74.13KB
下载 相关 举报
Excel高级应用VBA实验题目解析Word格式.docx_第1页
第1页 / 共19页
Excel高级应用VBA实验题目解析Word格式.docx_第2页
第2页 / 共19页
Excel高级应用VBA实验题目解析Word格式.docx_第3页
第3页 / 共19页
Excel高级应用VBA实验题目解析Word格式.docx_第4页
第4页 / 共19页
Excel高级应用VBA实验题目解析Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Excel高级应用VBA实验题目解析Word格式.docx

《Excel高级应用VBA实验题目解析Word格式.docx》由会员分享,可在线阅读,更多相关《Excel高级应用VBA实验题目解析Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

Excel高级应用VBA实验题目解析Word格式.docx

2在sheet1上创建“窗体”命令按钮并指定“宏”代码sy22,补充代码完成:

从键盘输入一个整数n,输出如下图形。

其中每个“*”在单元格中水平和垂直方向都要求居中。

n

Subsy22()

DimnAsInteger,iAsInteger,jAsInteger'

第1空

n=InputBox("

输入行数"

)'

从键盘输入数据并存放到变量n

Sheets("

Sheet1"

).Cells.ClearContents'

清除sheet1工作表中单元格的容

Fori=1Ton'

循环打印,输出n行"

*"

Forj=1To2*i-1'

每行输出奇数(2*i-1)个"

,如:

1,3,5个

Cells(i,n-i+j).Value="

Nextj

Nexti

Cells(1,n).Activate'

激活A列N行的单元格

ActiveCell.CurrentRegion.Select'

选定单元格所在的当前区域

.Font.Size=16'

字体大小

.Font.Bold=True'

字体加粗

.HorizontalAlignment=xlCenter'

水平方向居中

.VerticalAlignment=xlCenter'

垂直方向居中

Endsub

Esy03

1.调用EXCEL的RAND和INT部函数,在A列的1—10行输入序号1—10,在B列的1—10行填入0—1之间的随机数,在C列的1—10行填入两位正整数,最后在C列的11行求出该列的最大数(调用MAX函数)。

请参照程序上下文补充完整的语句

Subsy31()

DimkAsInteger

DimaAsString,bAsString,cAsString

Fork=1To10

a="

A"

&

k

b="

B"

c="

C"

Range(a).Value=k'

在A列的1-10行输入序号1-10

Range(b).Value=Rnd()'

在B列的1-10行填入0-1之间的随机数

Range(c).Value=10+Int(90*Rnd())'

在C列的1-10行填入两位正整数

Nextk

Setmyr=Worksheets("

).Range("

C1:

C10"

c11"

)=WorksheetFunction.Max(myr)'

在C列的11行求出该列的最大数(调用MAX函数)

Esy04

输入一个字符,判断该字符是字母字符、数字字符还是其他字符,并用Msgbox函数输出结果。

分析:

用IF语句实现

Subpdzi()

DimstrCAsString'

定义变量strC为字符型

strC=InputBox("

请输入字符"

第1空,利用InputBox函数输入字符放到strC中

IfUCase(strC)>

="

AndUCase(strC)<

Z"

Then'

判断输入字符是否为A~Z(其中UCase函数为将字符转换成大写字符的函数)

MsgBox(strC&

"

是字母"

第2空,利用MsgBox函数输出判断结果

ElseIfstrC>

=0AndstrC<

=9Then'

'

第3空,判断输入字符是否为0~9

是数字"

利用MsgBox函数输出判断结果

Else'

第4空

MsgBox("

字符"

strC&

既不是字母,也不是数字"

EndIf

2某学校的职工人事数据存在Excel工作表中。

现要按职称提升每位职工的工资,各种职称的工资增长情况如下:

教授150、副教授130、讲师100、助教80、高级工程师150、工程师140、助工90。

用select语句编写计算增加工资的过程。

Subaddsalary()

r=ActiveCell.Row'

活动单元格为要求得增加工资的单元格,计算活动单元格的行号

t=Cells(r,3)'

第1空,定位“职称”所在的单元格

SelectCaset

Case"

教授"

"

高级工程师"

第2空

ActiveCell=150

副教授"

ActiveCell=130

讲师"

ActiveCell=100

助教"

ActiveCell=80

工程师"

ActiveCell=140

助工"

ActiveCell=90

EndSelect'

第3空,

3:

某教师讲授了一门考查课程,他平时及期末考试都用百分制衡量学生的成绩,设该教师的成绩表如图所示。

学校要求最后的成绩都用等级制。

百分制与等级制的转换规则为:

60分以下为不及格,60~70分为及格,70~80分为中等,80~90分为良,90~100分为优。

编写一个百分制与等级制的转换过程实现成绩的等级转换。

Subchange()

score=ActiveCell.Offset(0,-1).Value'

SelectCasescore

CaseIs>

=90'

ActiveCell="

优"

=80

良"

=70

中"

=60

及格"

CaseElse'

第3空

不及格"

EndSelect

4:

打开Excel工作簿EC404.xls,在A2,B2和C2单元格输入a,b,c的值,单击最大值按钮,在D2显示这三个数的最大值。

解题思路:

假设三个数中的第一个数是最大值,用这个假定的最大值分别跟剩下的两个数比较,如果假定的最大值小于其它两个数,则最大值为较大的那个数。

Submax()

DimaAsDouble,bAsDouble,cAsDouble,maxAsDouble

a=Val(Cells(2,1))

b=Val(Cells(2,2))

c=Val(Cells(2,3))

max=a'

Ifmax<

bThen

max=b'

cThen'

max=c'

Cells(2,4)=max

5:

编写程序:

创建一简单应用程序,单击窗体,利用InputBox函数如(图2)所示显示对话框,设定固定密码就是“password”(注意输入的大小写);

若输入密码正确与否,利用MsgBox函数分别显示如(图3)和(图4)所示来提示用户输入的密码正确与不正确的对话框。

(图2)

 

(图3)(图4)

提示:

请根据图3和图4中的界面填写第2空和第3空,Msgbox函数的格式为:

Msgbox提示信息,按钮数目及形式,对话框标题

Subpass()

t=InputBox("

请输入密码"

输入密码"

Ift="

password"

MsgBox"

恭喜你,密码正确!

"

0,"

正确"

Else

对不起!

你是非法用户!

vbCritical,"

拒绝"

EndIf

Esy05

实验1:

编写程序,求1+2+3+….+10的和并输出其结果。

该题用For……Next结构实现累加。

Subsum()

Rem求1+2+..+10的和并输出

DimsAsInteger

s=0'

Fori=1To10'

s=s+i'

Nexti

MsgBox("

1+2+3+...+10="

s)'

实验2:

输入任意多个正整数,编写程序求其和与平均值。

当输入数小于0时结束数据的输入。

该题用DoWhile……Loop结构实现累加,While后面需要有控制循环是否继续的条件,请注意While与Until的区别。

Subcomput()

DimsumAsLong'

sum用来保存所输入数的和

DimdataAsInteger

DimkAsInteger'

k为记数器,记录输入数的个数

k=0

data=InputBox("

请输入数据:

DoWhiledata>

=0'

sum=sum+data'

k=k+1'

data=InputBox("

Loop

一共输入了"

k&

个数。

_

&

vbCrLf&

其和为"

sum&

其平均值为:

sum/k

实验3:

编写程序计算SUM=1+1*2+1*2*3+……+1*2*3*…*100的和。

该题用Do……Loop结构实现累积与累加,目标是求100项的累加,而每一项是一个累积式。

Submulti()

DimsumAsDouble

DimiAsInteger

DimtAsDouble

i=1:

t=1:

sum=0

DoWhilei<

=100'

t=t*i'

sum=sum+t'

i=i+1'

Loop

1+1*2+1*2*3+...+1*2*3*...*100="

sum)

实验4:

打开Excel工作簿E504.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,7,6,5,15,16,17,18,19,20。

Sub逆置()

i=Cells(6,12)'

起始位置

j=i+Cells(7,12)-1'

第1空,终止位置

j'

t=Cells(1,i)

Cells(1,i)=Cells(1,j)'

Cells(1,j)=t'

i=i+1

j=j-1'

第5空

EndSub

Esy06

打开Excel工作簿E601.xls,编写一个程序,提取字符串中的数字符号。

例如,程序运行后输入字符串abc123edf456gh,则输出“123456”。

Subtq()

s=InputBox("

请输入一个字符串:

输入一个字符串,放在变量s中

n=Len(s)'

第1空,求出s的长度,放在变量n中

Fori=1Ton

a=Mid(s,i,1)'

第2空,求字符串a

Ifa>

=oAnda<

第3空,如果a的值是0到9之间的数字符号,

b=b&

a'

第4空,则把它拼接到结果字符串变量b中

MsgBoxb'

输出结果

打开Excel工作簿E602.xls,工作表第1行有n个升序排列的数值,第2行有m个升序排列的数值,请编写一个程序,将第2行的数据合并到第1行中,并保持所有数据升序排列

Sub合并()

r=Rows

(1).End(xlToRight).Column'

求第一行列数

t=Rows

(2).End(xlToRight).Column'

求第二行列数

Fori=1Tot'

对第二行的每个数据进行处理

a=Cells(2,i):

Cells(2,i)="

取出第二行的一个数据

Fors=rTo1Step-1'

第1空,从后往前扫描

=Cells(1,s)ThenExitFor'

第4空,退出本层循环

Cells(1,s+1)=Cells(1,s)'

第2空,移动数据

Nexts

Cells(1,s+1)=a'

插入数据

r=r+1'

第3空,修改目标数据区长度

Next'

第5空

在“D:

\Esy06”文件夹下打开文件EC603.xls,“求任意区域数值总和”按钮指定到名称为“sumSelection”的宏,补充宏代码,使之完成如下功能:

计算工作表中任意选定区域的数据总和,并用信息提示对话框将结果输出,完成后按原文件名保存在原位置

SubsumSelection()

ForEachxInSelection'

第1空,”For####[1]####InSelection“

s=s+x'

Next

msgbox"

该区域的总和为:

s'

第3空,”msgbox"

####[3]####“

\Esy06”文件夹下打开文件EC604.xls,“从分班”按钮指定到名称为“Student”的宏,补充宏代码,使之完成如下功能:

按顺序(成绩从高到低)对学生进行分班,每个班25名学生,每个班保存在一个新的工作表中。

完成后按原文件名保存在原位置

SubStudent()

n=0

WhileNot(IsEmpty(Cells(n+4,1)))

n=n+1'

第1空

Wend

m=Application.WorksheetFunction.RoundUp((n/25),0)

bs=1

Do

Sheets.Add

ActiveSheet.Name=Str(bs)+"

班"

Cells(1,1)="

英语"

+Str(bs)+"

Cells(2,1)="

学号"

Cells(2,2)="

姓名"

Cells(2,3)="

成绩"

Fori=1To25

Forj=1To3'

第2空

Cells(i+2,j)=Sheets("

sheet1"

).Cells(i+3+(bs-1)*25,j)'

第3空

bs=bs+1'

第4空,####[4]####

LoopWhilebs<

=m'

第5空,####[5]####

Esy07

打开文件E701.xls,“一维数组求极值”按钮指定到名称为“一维数组求极值”的宏,补充宏代码,使之完成如下功能:

输入10个数,将这10个数分别放在第1行的10个单元格中,求出这10个数的最大值和最小值放在相对应的单元格中。

Sub一维数组求极值()

DimE(1To10)AsSingle'

第1空,定义一个名称为E,元素个数为10的一维数组

DimmaxAsSingle,minAsSingle

MsgBox"

输入的10个数据如下:

Fori=1To10'

For语句的作用是先将输入的数据放到数组中,然后再将数组中的数放到对应单元格里

E(i)=InputBox("

Cells(1,i)=i'

max=E

(1):

min=E

(1)

Fori=2To10

E(i)Thenmax=E(i)'

Ifmin>

E(i)Thenmin=E(i)'

Cells(2,2)=max

Cells(3,2)=min

打开文件E702.xls,“一维动态数组的使用”按钮指定到名称为“一维动态数组的使用”的宏,补充宏代码,将整型动态数组X声明为具有20个元素的数组,并给数组的所有元素赋值1。

Sub一维动态数组的使用()

DimX()AsInteger'

第6空

ReDimX(1To20)'

第7空

ForI=1To20

X(I)=1'

第8空

Cells(I,1)=X(I)

NextI

打开文件E703.xls,“统计英语成绩”按钮指定到名称为“统计英语成绩”的宏,补充宏代码,使之完成如下功能:

首先输入该班人数,然后再分别输入该班学生的英语成绩并将英语成绩依次放在第1行,将大于平均值的数据以红色字体显示出来。

Sub统计英语成绩()

DimE()AsSingle

DimnAsInteger

DimsAsSingle,averAsSingle

请输入该班的人数"

ReDimE(n)'

第9空

输入的"

n&

个数据如下:

请输入英语成绩:

Cells(1,i)=E(i)

s=s+E(i)'

第10空

aver=s/n'

第11空

将大于平均值的数据以红色字体显示出来:

Ifaver<

E(i)ThenCells(1,i).Font.ColorIndex=3

Esy08

打开文件E801.xls,“子程序过程求阶乘”按钮指向名称为“子程序过程求阶乘”的宏,首先补充子程序过程Fact的代码,使之完成阶乘计算。

然后,分别用call语句调用Fact过程计算出5的阶乘,用非call语句调用Fact过程计算出8的阶乘。

Subfact(nAsInteger)'

子程序fact求n的阶乘

DimiAsInteger,tAsLong

t=1

MsgBoxn&

的阶乘为:

t'

第2空,输出如下容“n的阶乘为:

t”,当程序运行时n和t都为具体数

Sub子程序过程求阶乘()

Callfact(5)'

第3空,call语句调用Fact过程计算5的阶乘

fact8'

第4空,非call语句调用Fact过程计算8的阶乘

打开文件E802.xls,补充自定义函数“Area”的宏代码,首先判断三条边能否组成三角形,如果能就完成三角形面积的计算(三角形面积=

),如果不能则输出"

这三条边不能组成三角形!

,并在D2:

D8中调用“Area”函数。

Functionarea(x,y,z)

c=(x+y+z)/2

Ifx+y>

zAndy+z>

xAndx+z>

yThen'

第5空,判断三条边能否组成三角形

area=((c-x)*(c-y)*(c-z))^1/2'

area="

EndFunction

打开文件E803.xls,补充宏代码,完成如下功能:

将当前工作表中第1行从指定位置m开始的n个数按相反顺序重新排列。

从第5个数开始,将10个数进行逆序排列

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

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1