Excel宏的应用.docx
- 文档编号:959041
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:28
- 大小:30.04KB
Excel宏的应用.docx
《Excel宏的应用.docx》由会员分享,可在线阅读,更多相关《Excel宏的应用.docx(28页珍藏版)》请在冰点文库上搜索。
Excel宏的应用
Excel宏的应用
Excel宏的应用-成绩分析处理程序
文章来源:
互联网
Excel电子表格软件是应用最广泛的软件之一,它的数据处理、图表功能及各种函数和工具深受广大用户的喜爱。
Excel文件是一个工作薄,一个工作薄最多可以包含255个工作表,每个工作表又可以包含大量的数据。
Excel的强大优势还在于它提供的宏语言VisualBasic
forApplication(VBA).VisualBasic是windows环境下开发应用软件的一种通用程序设计语言,功能强大,简便易用。
VBA是它的一个子集,可以广泛地应用于Microsoft公司开发的各种软件中,例如Word、Excel、Access等。
那么,"宏"到底是什么呢,
在Excel中,"宏"是一个难以理解的概念,但对于一个具体的"宏"而言,却是容易理解的,如果说"将一块文字变为'黑体',字号为'三号'"就可以看作一个"宏"的话,那么"宏"就不难理解了,其实Excel中的许多操作都可以是一个"宏"。
"记录宏"其实就是将工作的一系列操作结果录制下来,并命名存储(相当于VB中一个子程序)。
在Excel中,"记录宏"仅记录操作结果,而不记录操作过程。
例如,改变文字字体时,需要打开"字体"栏中的下拉列表,再选择一种字体,这时文字即变为所选择的字体,这是一个过程,结果是将所选择的文字改变为所选择的字体。
而"记录宏"则只记录"将所选择的文字改变为所选择的字体"这一结果。
Excel中工作表是由行和列组成的二维表格,我们可以通过系统提供的语句activesheet.cells(I,j),将当前工作表中的第I行第j列所在的单元格中的数据取出(也可将它数据填入到指定的单元格中),然后反把它放入所定义的数组中,这时就可以对其进行各种操作,如求平均分、总分、分数段人数等等。
本人就利用Excel中所提供的宏功能来做学生成绩的分析处理程序。
本程序是Excel中的一个文件,其中包含以下几个宏:
分班、总分、平均分、分数段、删除等。
本程序是以本校高三理科班学生成绩进行分析。
有关程序中用到的几具宏的功能说明:
分班:
针对于难以确定班级的情况下,以班为单位进行分班,本宏可以作为高一新生入学时进行分班的功能。
总分:
对原始的成绩自动求总分。
平均分:
对原始的成绩以班为单位进行各学科平均成绩的计算及全校各学科成绩的计算。
分数段:
给定一个最高分数及最低分数,然后统计出各班各个分数段的人数,各分数段人数进行累计。
删除:
用于删除不用的工作表。
现将各个宏的代码列举如下:
一.分班
Sub分班()
Conststudentno=191'学生人数
Constzdno=12'字段数
Dimzd$(zdno)'定义为12个字段的数组
Dima(studentno,zdno),stu(60,zdno)Dimnam$(studentno),bjname$(60)'定义一个存放全校学生名
字及各班学生名字的数组
Dimbj(studentno)'定义存放班级的一个数组
'理科班工作表
Sheets("高三理").Select
Fori=2Tostudentno
bj(i)=ActiveSheet.Cells(i,1)
nam$(i)=ActiveSheet.Cells(i,2)
Forj=3Tozdno
a(i,j)=ActiveSheet.Cells(i,j)
Nextj
Nexti
'存放字段到数组中。
Fori=1Tozdno
zd$(i)=ActiveSheet.Cells(1,i)Nexti
'先建立各个班级的工作表
Sheets("高三理").Select
Sheets("高三理").CopyAfter:
=Sheets("分数段")
Sheets("高三理
(2)").Select
Sheets("高三理
(2)").Name="33"
Fori=2Tostudentno
Forj=1Tozdno
ActiveSheet.Cells(i,j)=Space$
(1)
Nextj
Nexti
Range("a1").Select
Fori=1Tozdno
ActiveSheet.Cells(1,i)=zd$(i)
Nexti
'34到36班工作表的建立
Fori=34To36
x$=Mid$(Str(33),2)
Sheets(x$).Select
Sheets(x$).CopyAfter:
=Sheets("分数段")
Sheets(x$+"
(2)").Select
Sheets(x$+"
(2)").Name=Mid$(Str(i),2)
Nexti
'具体分班。
Fork=33To36
bjrs=0
x$=Mid$(Str(k),2)
no=kMod10
Sheets(x$).Select
Fori=2Tostudentno
Ifbj(i)=noThen
bjrs=bjrs+1
bjname$(bjrs)=nam$(i)
Forj=3Tozdno
stu(bjrs,j)=a(i,j)
Nextj
EndIf
Nexti
Fori=2Tobjrs
ActiveSheet.Cells(i,1)=no
ActiveSheet.Cells(i,2)=bjname$(i)
Forj=3Tozdno
ActiveSheet.Cells(i,j)=stu(i,j)
Nextj
Nexti
Nextk
EndSub
二.总分
Conststudentno=190
Constxknum=6
Constzdnum=12
Sheets("高三理").Select
Fori=2Tostudentno+1
Sum=0
Forj=1Toxknum
Sum=Sum+ActiveSheet.Cells(i,j+3)
Nextj
ActiveSheet.Cells(i,zdnum-1)=Sum
Nexti
EndSub
三.平均分
Sub平均分()
Conststudentno=190
Constxknum=6
Dimfs(studentno,xknum),pjf3(4,6),bjrs(4),qxpjf(6)
Dimbj(studentno)
Sheets("高三理").Select
'以下程序段用于求全校平均分
Fori=1Tostudentno
bj(i)=ActiveSheet.Cells(i+1,1)
Forj=1Toxknum
fs(i,j)=ActiveSheet.Cells(i+1,j+3)
Nextj
Nexti
Fori=1Toxknum
Sum=0
Forj=1Tostudentno
um=Sum+fs(j,i)
Nextj
qxpjf(i)=Sum/(j-1)Nexti
'以下程序段用于求各班平均分
Forj=1To4
Fori=1Tostudentno
Ifbj(i)=j+2Then
bjrs(j)=bjrs(j)+1
Fork=1Toxknum
pjf3(j,k)=pjf3(j,k)+fs(i,k)
Nextk
EndIf
Nexti
Nextj
Forj=1To4
Fori=1To6
pjf3(j,i)=pjf3(j,i)/bjrs(j)
Nexti
Nextj
'写入各班各科平均分
Sheets("平均分").Select
Fori=1To4
Forj=1To6
ActiveSheet.Cells(i+2,j+1)=pjf3(i,j)
Nextj
Nexti
'写入全校各科平均分
i=7
Forj=1To6
ActiveSheet.Cells(i,j+1)=qxpjf(j)
Nextj
EndSub
四.分数段
Sub分数段()
Constmax=600
Constmin=390
Conststudentno=190Constbjnum=4
Constfsdnum=22
Dimbjfsd(bjnum,fsdnum),zf(studentno,2)
Sheets("高三理").Select
Fori=1Tostudentno
zf(i,1)=ActiveSheet.Cells(i+1,1)'存放班级
zf(i,2)=ActiveSheet.Cells(i+1,11)'存放总分
Nexti
Fori=1Tostudentno
Forj=1To4'3---6班共4个班级
Ifzf(i,1)=j+2Then
Fork=maxTominStep-10
low=Int((max+10-k)/10)
Ifzf(i,2)>kThenbjfsd(j,low)=bjfsd(j,low)
+1
Nextk
EndIf
Nextj
Nexti
Sheets("sheet3").Select
Fori=3To6
Fork=1Tofsdnum
ActiveSheet.Cells(i,k+1)=bjfsd(i-2,k)
Nextk
Nexti
Range("M3:
W6").Select
Selection.Cut
ActiveWindow.LargeScrollToRight:
=-1
Range("B8").Select
ActiveSheet.Paste
EndSub
五.删除
Sub删除()
Sheets("33").Select
ActiveWindow.SelectedSheets.Delete
Sheets("34").Select
ActiveWindow.SelectedSheets.Delete
Sheets("35").Select
ActiveWindow.SelectedSheets.Delete
Sheets("36").Select
ActiveWindow.SelectedSheets.DeleteEndSub
六.本程序的界面及各个宏运行的结果
平均分统计结果:
总分统计结果:
分班结果
分数段统计结果
常用办公软件Excel技巧的整理、讲解,在这里给读者们看一看,给大家一些提示,希望在你在平时能用得上。
1、两列数据查找相同值对应的位置
=MATCH(B1,A:
A,0)
2、已知公式得结果
定义名称=EVALUATE(Sheet1~C1)
已知结果得公式
定义名称=GET.CELL(6,Sheet1~C1)
3、强制换行
用Alt+Enter
4、超过15位数字输入
这个问题问的人太多了,也收起来吧。
一、单元格设置为文本;二、在输入数字前先输入'
5、如果隐藏了B列,如果让它显示出来,
选中A到C列,点击右键,取消隐藏
选中A到C列,双击选中任一列宽线或改变任一列宽
将鼠标移到到AC列之间,等鼠标变为双竖线时拖动之。
6、EXCEL中行列互换
复制,选择性粘贴,选中转置,确定即可
7、Excel是怎么加密的
(1)、保存时可以的另存为>>右上角的"工具">>常规>>设置
(2)、工具>>选项>>安全性
8、关于COUNTIF
COUNTIF函数只能有一个条件,如大于90,为=COUNTIF(A1:
A10,">=90")
介于80与90之间需用减,为=COUNTIF(A1:
A10,">80")-COUNTIF(A1:
A10,">90")
9、根据身份证号提取出生日期
(1)、=IF(LEN(A1)=18,DATE(MID(A1,7,4),MID(A1,11,2),MID(A1,13,2)),IF(LEN(A1)=15,DATE(MID(A1,7,2),MID(A1,9,2),MID(A1,11,2)),"错误身份证号"))
(2)、=TEXT(MID(A2,7,6+(LEN(A2)=18)*2),"#-00-00")*1
10、想在SHEET2中完全引用SHEET1输入的数据
工作组,按住Shift或Ctrl键,同时选定Sheet1、Sheet2。
11、一列中不输入重复数字
[数据]--[有效性]--[自定义]--[公式]
输入=COUNTIF(A:
A,A1)=1
如果要查找重复输入的数字
条件格式》公式》=COUNTIF(A:
A,A5)>1》格式选红色
12、直接打开一个电子表格文件的时候打不开
“文件夹选项”-“文件类型”中找到.XLS文件,并在“高级”中确认是否有参数1%,如果没有,请手工加上
13、Excel下拉菜单的实现
[数据]-[有效性]-[序列]
14、10列数据合计成一列
=SUM(OFFSET($A,(ROW()-2)*10+1,,10,1))
15、查找数据公式两个(基本查找函数为VLOOKUP,MATCH)
(1)、根据符合行列两个条件查找对应结果
=VLOOKUP(H1,A1:
E7,MATCH(I1,A1:
E1,0),FALSE)
(2)、根据符合两列数据查找对应结果(为数组公式)
=INDEX(C1:
C7,MATCH(H1&I1,A1:
A7&B1:
B7,0))
16、如何隐藏单元格中的0
单元格格式自定义0;-0;;@或选项》视图》零值去
勾。
呵呵,如果用公式就要看情况了。
17、多个工作表的单元格合并计算
=Sheet1~D4+Sheet2~D4+Sheet3~D4,更好的=SUM(Sheet1:
Sheet3~D4)
18、获得工作表名称
(1)、定义名称:
Name
=GET.DOCUMENT(88)
(2)、定义名称:
Path
=GET.DOCUMENT
(2)
(3)、在A1中输入=CELL("filename")得到路径级文件名
在需要得到文件名的单元格输入
=MID(A1,FIND("*",SUBSTITUTE(A1,"","*",LEN(A1)-LEN(SUBSTITUTE(A1,"",""))))+1,LEN(A1))
(4)、自定义函数
PublicFunctionname()
DimfilenameAsString
filename=ActiveWorkbook.name
name=filename
EndFunction
19、如何获取一个月的最大天数
:
"=DAY(DATE(2002,3,1)-1)"或"=DAY(B1-1)",B1为"2001-03-01
数据区包含某一字符的项的总和,该用什么公式
=sumif(a:
a,"*"&"某一字符"&"*",数据区)
最后一行为文本:
=offset($b,MATCH(CHAR(65535),b:
b)-1,)
最后一行为数字:
=offset($b,MATCH(9.9999E+307,b:
b)-1,)
或者:
=lookup(2,1/(b1:
b1000<>""),b1:
b1000)
评委打分中,如何去掉两个以上最高分,两个以上最底分,求剩余人员的平均分,同时显示出被去掉的分数。
看看trimmean()函数帮助。
被去掉的分数:
最大两个:
=large(data,)
最小两个:
=small(data,)
怎样很简单的判断最后一位是字母
right(a1)*1
出错的字母
=IF(ISNUMBER(--RIGHT(A1,1)),"数字","字母")
=IF(ISERR(RIGHT(A1)*1),"字母","数字")
如何设置单元格,令其不接受包含空格的字符
选定A列
数据——有效性——自定义——公式
=iserror(find("",a1))
数据--有效性--自定义--公式
=len(a1)=len(trim(a1))
原来的函数是=a1+a4+a7+a10+a13+a16+a19+a22„„
现在是=sum(n(offset(a1,(row(1:
10)-1)*3,)))
在一个工作表中引用其他工作表中的数据,但是被引用的工作表不是固定的,根据我输入的工作表名自动选择相应的工作表中的数据,请问在公式里怎样引用,
=INDIRECT("A1"&"~"&"E1")A1为工作表名
奇数行求和=SUMPRODUCT((A1:
A1000)*MOD(ROW(A1:
A1000),2))
偶数行求和=SUMPRODUCT((A1:
A1000)*NOT(MOD(ROW(A1:
A1000),2)))
查看字符串字数
=LEN(A1)
求非空单元格数量
公式计算出来的数据,COUNTA不能用的(否则空字符也计算进去了)
=COUNTIF($E:
$E536,",*")
动态求和公式,自A列A1单元格到当前行前面一行的
单元格求和.
=SUM(INDIRECT("A1:
A"&ROW()-1))
20、比较好用的Excel文档修复工具
ExcelRecovery
21、EXCEL开方运算
将8开3次方,可以用这个公式,在单元格中输入=8^(1/3)
22、单元格中的数据分散对齐
文本格式》全角输入
23、查找工作表中的链接
Ctrl+~或编辑》链接
24、如何让空单元格自动填为0
选中需更改的区域》查找》空》替换》0
25、把Word里的数字转换到Excel
方法有多种,选中》复制》设置输入单元格为文本》选择性粘贴》值
选中》表格转换为文本》粘贴》分列》对分列选项设置为文本
另存为文本文件》EXCEL中打开文本文件》对导入文本对话框进行对应设置
如今使用Excel协助处理各种各样数据的人已经越来越多了,但Excel中一些隐蔽很深的小技巧却不为大多数人所知,
下面我们就把几个实用的、常用的小技巧列举给大家。
一、快速选中所有非空单元格:
在Excel中选中所有单元格比较容易,只需单击工作表左上角的行号(A、B、C„„)行与列号(1、2、3、„„)列的交叉空格,也可以按住左键拖选。
但如果要在一个有几百几千行数据的工作表中选中所有有数据的单元格时,再去按住左键拖选就有点麻烦了,这时我们可以这样做:
先在任意一个有数据的单元格中单击,然后按Ctrl+Shift+*键(先用一只手按住一个Ctrl键和一个Shift键不放开,再用另一只手按一下星号键)就能轻松搞定了。
二、快速打开所需工作表:
我们一般把许多数据相关的工作表建在一个工作簿中,且为查看方便,每个工作表的名都用汉字起得很长,由于受屏幕大小的限制,就造成了有许多工作表名称没有被显示出来,这时我们可以右键单击第一个工作表名前边的工作表选择按钮,再在弹出的菜单中选择你看不到的工作表。
(如图1)
图1
三、快速定位到某一单元格:
有时我们需要在一个几百上千的工作表中快速定位到某一个单元格,如想快速查看年级段第200名同学的总成绩:
1、单击“编辑”?
定位,在“定位”对话框中的“引用位置”框中输入L201(L是“总分”所在列,201是因为有表头,所在200名的基础上加1。
)点“确定”就能直接定位到年级段第200名同学总成绩的单元格了。
(如图2)
图2(点击看大图)
2、在编辑栏上的地址栏中直接输入行列号,然后回车即可。
(如图3)
四、打印行列号:
为了更加方便的查看数据及公式引用,有时需要把工作表的行号和列号也打印出来,如实施素质教育的今天,不准给学生排名次,但我们可以利用列号来查看学生的具体名次:
单击“文件”?
页面设置,在“页面设置”对话框中选择“工作表”选项卡,在“打印”项中把“行号列标”勾选上,点“确定”退出后再打印就可以了。
(如图4)
图4
五、利用分页预览调整打印区域:
数据在打印输出之前一般要使用打印预览查看一下纸张是否够大,如果只多出一两行或一两列,则需返复调整,这时可以单击“视图”?
分页预览,在分页预览模式下,直接按住左键拖动分页符(蓝色虚线)就可以了,调整完后再单击“视图”?
普通,返回默认模式。
(如图5)
Excel快速计算、统计混合编班考试成绩表
为了保证学生成绩录入和处理的公平性,学校采用混合编班统一录入的方式。
也就是说,把同年级多个班的学生成绩统一录入到一个Excel工作表中,而且使同班的学生不相邻。
这种情况下,想在不破坏原始工作表的情况下统计各班学生各科的总分、平均分及各科的分数段分布,咱们还得好好动一下脑子。
先看一下原始成绩表,如图1所示。
图1
第一列为学生的考号,其中考号的第5位和第6位数字是班级代码。
学生各科的成绩分别在C、D、E、F列。
而我们需要统计的是各学科各班的总分、平均分及各分数段人数
等项指标,如图2所示。
图2
一、总分的统计
在不破坏原工作表顺序的情况下,总分的统计我们可以使用SUM函数及数组公式来完成。
首先点击L3单元格计算01班语文科的总成绩。
输入“=SUM(IF(MID($A$2:
$A$150,5,2)=
$K3,$C$2:
$C$150))”,然后按下“Ctrl+Shift+Enter”快捷键,可以看到公式的最外层添加了数组公式标记(一对大括号),公式变身成为“{=SUM(IF(MID($A$2:
$A$150,5,2)=
$K3,$C$2:
$C$150))}”。
切记这对大括号是不可以手工输入的。
按下快捷键后,L3单元格立刻显示出了01班语文科的总分。
快吧?
还有更快的呢。
单击此单元格,向下拖动其填充句柄至L10单元格复制此公式,立刻各班的语文科总分就都有了。
方便吧?
简单介绍一下公式中用到的相关函数,那咱们就可以举一反三了。
MID($A$2:
$A$150,5,2)=$K3:
K3单元格是班级代码。
而MID函数可以截取字符串中的指定字符,如MID(A2,5,2)的含义是从A2单元格字符串的第5个字符开始截取2个字符组成新的字符串。
至于公式中所写的的
MID($A$2:
$A$150,5,2)就可以利用数组公式对A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Excel 应用