为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

excel宏教程

2017-09-20 12页 doc 28KB 24阅读

用户头像

is_841159

暂无简介

举报
excel宏教程excel宏教程 什么是宏 计算机科学里的宏是一种抽象的,根据一系列预定义的规则替换一定的文本模式。Excel 办公软件自动集成了“VBA”高级程序语言,用此语言编制出的程序就叫“宏”。使用“VBA”需要有一定的编程基础和耗费大量的时间,因此,绝大多数的使用者仅使用了Excel的一般制表功能,很少使用到“VBA”。 解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数...
excel宏教程
excel宏教程 什么是宏 计算机科学里的宏是一种抽象的,根据一系列预定义的规则替换一定的文本模式。Excel 办公软件自动集成了“VBA”高级程序语言,用此语言编制出的程序就叫“宏”。使用“VBA”需要有一定的编程基础和耗费大量的时间,因此,绝大多数的使用者仅使用了Excel的一般制功能,很少使用到“VBA”。 解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。 宏的用途在于自动化频繁使用的序列或者是获得一种更强大的抽象能力,,但这常常是一回事。 计算机语言如C或汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C 程序员可以获得更精巧的宏。 Lisp类语言如Common Lisp和Scheme有更精巧的宏系统: 宏的行为如同是函数对自身程序文本的变形,并且可以应用全部语言来表达这种变形。一个C宏可以定义一段语法的替换,然而一个Lisp的宏却可以控制一节代码的计算。获得了控制代码的执行顺序(见惰性计算和非限制函数)的能力,使得新创建的语法结构与语言内建的语法结构不可区分。例如,一种Lisp 方言有 cond 而没有if ,就可以使用宏由前者定义后者。Lisp 语法的去部主要扩展,比如面向对象的CLOS 系统,可以由宏来定义。 宏的典型应用 加速日常编辑和格式设置 组合多个命令 使对话框中的选项更易于访问 使一系列复杂的任务自动执行 应用程序也可以使用一种和宏类似机理的系统来允许用户将一系列(一般是最常使用到的操作)自定义为一个步骤。也就是用户执行一系列操作,并且让应用程序来“记住”这些操作以及顺序。更高级的用户可以通过内建的宏编程来来直接使用那些应用程序的功能。当使用一种不熟悉的宏语言来编程时,比较有效的方法就是记录一连串用户希望得到的操作,然后通过阅读应用程序记录下来的宏文件来理解宏命令的结构组成。 宏编程介绍 在用一种不熟悉的宏语言进行宏编程时,可以这样做,首先记录下用户想要宏完成什么,然后打开宏文件并尝试理解命令结构如何工作。也可以修改命令以调整宏。一些宏语言,比如Great Plains账务(,accounting)软件的 Dexterity 运行时引擎,不能从其它数据源(如由逗号分隔的文本文件)导入数据。这一限制可以通过用更强大的编程语言,如 VBA 来创建一个计算机程序在此弱编程语言里生成一个特别的宏来解决。例如,可以对 Microsoft Excel 宏编程从扩展样式表或文本文件中读取数据并创建 Great Plains .mac 文件,这一文件被用于将特定的数据导入 Great Plains. 需要针对每一个新的数据集合生成新的 .mac 文件。 键盘宏 键盘宏和编辑器宏分别在图形用户界面和编辑器中被交互式地使用。使用它们可以用简短的击键代替冗长的命令序列,并为重复性任务提供了一个简单的自动化形式。 程序员的文本编辑器 Emacs (“编辑宏”[Editing MACroS]的简称)是沿用这一思想的产物。事实上,大多数编辑器是由宏组成的,Emacs 最初被设计为编辑语言 TECO 的宏集,后被移植为 Lisp 的一中方言 Emacs Lisp。 宏语言 计算机语言如 C 或汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C 程序员可以获得更精巧的宏。 宏语言是一类编程语言,其全部或多数计算是由扩展宏完成的。宏语言并未在通用编程中广泛使用,但在文本处理程序中应用普遍。例如, C preprocessor C 预处理器 Internet Macros(iOpus) M4(如前所述,源于AT&T,捆绑于Unix) 宏定义 c程序提供的预处理功能之一。包括带参数的宏定义和不带参数的宏定义。具体是指用一个指定的标志符来进行简单的字符串替换或者进行阐述替换。形式为: #define标志符(参数表) 字符串 宏名 在上定义中的标志符被称为“宏名”。 宏展开 在c程序编译时将宏名替换成字符串的过程称为“宏展开”。 微软Word和宏病毒 Visual Basic for Applications (VBA),是 Microsoft Office 里的一种编程语言. 但由上面的定义,它完全不是一种宏语言。然而,它的功能已经从中发展并最终替代了用户应用程序的宏思想,所以他被广泛地错误地称为是一种宏语言。 VBA 可以访问许多操作系统函数并支持文档打开时自动执行宏。这使得用这种语言写计算机病毒成为可能。1990年代中后期,宏病毒成为了最流行的计算机病毒类型之一。其它的包括宏语言的项目,如openoffice.org,故意从其宏语言中排除了一些功能(如:自动执行)以避免破坏程序。然而,这一特性在很多事务中受到欢迎。 Excel宏教程 在Excel 97中,"宏"是一个难以理解的概念,但对于一个具体的"宏"而言,却是容易理解的,如果说"将一块文字变为注释:黑体注释:,字号为注释:三号注释:"就可以看作一个"宏"的话,那么"宏"就不难理解了,其实Excel 97中的许多操作都可以是一个"宏"。 "记录宏"其实就是将工作的一系列操作结果录制下来,并命名存储(相当于VB中一个子程序)。在Excel 97中,"记录宏"仅记录操作结果,而不记录操作过程。例如,改变文字字体时,需要打开"字体"栏中的下拉列表,再选择一种字体,这时文字即变为所选择的字 体,这是一个过程,结果是将所选择的文字改变为所选择的字体。而"记录宏"则只记录"将所选择的文字改变为所选择的字体"这一结果。 Excel 97中工作表是由行和列组成的二维表格,我们可以通过系统提供的语句activesheet.cells(I,j),将当前工作表中的第I行第j列所在的单元格中的数据取出(也可将它数据填入到指定的单元格中),然后反把它放入所定义的数组中,这时就可以对其进行各种操作,如求平均分、总分、分数段人数等等。 本人就利用Excel 97中所提供的宏功能来做学生成绩的分析处理程序。本程序是Excel中的一个文件,其中包含以下几个宏:分班、总分、平均分、分数段、删除等。 说明:?本程序是以本校高三理科班学生成绩进行分析。 ?有关程序中用到的几具宏的功能说明: 分班:针对于难以确定班级的情况下,以班为单位进行分班,本宏可以作为高一新生入学时进行分班的功能。 总分:对原始的成绩自动求总分。 平均分:对原始的成绩以班为单位进行各学科平均成绩的计算及全校各学科成绩的计算。 分数段:给定一个最高分数及最低分数,然后统计出各班各个分数段的人数,各分数段人数进行累计。 删除:用于删除不用的工作表。 现将各个宏的代码列举如下: ?分班 Sub 分班() Const studentno = 191 '注释:学生人数 Const zdno = 12 '注释:字段数 Dim zd$(zdno) ' 注释:定义为12个字段的数组 Dim a(studentno, zdno), stu(60, zdno) Dim nam$(studentno), bjname$(60) '注释:定义一个存放全校学生名字及各班学生名字的数组 Dim bj(studentno) '注释:定义存放班级的一个数组 注释: 理科班工作表 Sheets("高三理").Select For i = 2 To studentno bj(i) = ActiveSheet.Cells(i, 1) nam$(i) = ActiveSheet.Cells(i, 2) For j = 3 To zdno a(i, j) = ActiveSheet.Cells(i, j) Next j Next i '注释: 存放字段到数组中? For i = 1 To zdno zd$(i) = ActiveSheet.Cells(1, i) Next i '注释: 先建立各个班级的工作表 Sheets("高三理").Select Sheets("高三理").Copy After:=Sheets("高三理") Sheets("高三理 (2)").Select Sheets("高三理 (2)").Name = "33" For i = 2 To studentno For j = 1 To zdno ActiveSheet.Cells(i, j) = Space$(1) Next j Next i Range("a1").Select For i = 1 To zdno ActiveSheet.Cells(1, i) = zd$(i) Next i '注释:34到36班工作表的建立 For i = 34 To 36 x$ = Mid$(Str(33), 2) Sheets(x$).Select Sheets(x$).Copy After:=Sheets("高三理") Sheets(x$ & " (2)").Select Sheets(x$ & " (2)").Name = Mid$(Str(i), 2) Next i '注释: 具体分班? For k = 33 To 36 bjrs = 0 x$ = Mid$(Str(k), 2) no = k Mod 10 Sheets(x$).Select For i = 2 To studentno If bj(i) = no Then bjrs = bjrs + 1 bjname$(bjrs) = nam$(i) For j = 3 To zdno stu(bjrs, j) = a(i, j) Next j End If Next i For i = 2 To bjrs ActiveSheet.Cells(i, 1) = no ActiveSheet.Cells(i, 2) = bjname$(i) For j = 3 To zdno ActiveSheet.Cells(i, j) = stu(i, j) Next j Next i Next k End Sub 总分 ? Sub 总分() Const studentno = 191 Const xknum = 6 Const zdnum = 12 Sheets("高三理").Select For i = 2 To studentno Sum = 0 For j = 1 To xknum Sum = Sum + ActiveSheet.Cells(i, j + 2) Next j ActiveSheet.Cells(i, zdnum - 3) = Sum Next i End Sub ?平均分 Sub 平均分() Const studentno = 190 Const xknum = 6 Dim fs(studentno, xknum), pjf3(4, 6), bjrs(4), qxpjf(6) Dim bj(studentno) Sheets("高三理").Select 注释:以下程序段用于求全校平均分 For i = 1 To studentno bj(i) = ActiveSheet.Cells(i 1, 1) For j = 1 To xknum fs(i, j) = ActiveSheet.Cells(i 1, j 3) Next j Next i For i = 1 To xknum Sum = 0 For j = 1 To studentno Sum = Sum fs(j, i) Next j qxpjf(i) = Sum / (j - 1) Next i 注释:以下程序段用于求各班平均分 For j = 1 To 4 For i = 1 To studentno If bj(i) = j 2 Then bjrs(j) = bjrs(j) 1 For k = 1 To xknum pjf3(j, k) = pjf3(j, k) fs(i, k) Next k End If Next i Next j For j = 1 To 4 For i = 1 To 6 pjf3(j, i) = pjf3(j, i) / bjrs(j) Next i Next j 注释:写入各班各科平均分 Sheets("平均分").Select For i = 1 To 4 For j = 1 To 6 ActiveSheet.Cells(i 2, j 1) = pjf3(i, j) Next j Next i 注释:写入全校各科平均分 i = 7 For j = 1 To 6 ActiveSheet.Cells(i, j 1) = qxpjf(j) Next j End Sub ?分数段 Sub 分数段() Const max = 600 Const min = 390 Const studentno = 190 Const bjnum = 4 Const fsdnum = 22 Dim bjfsd(bjnum, fsdnum), zf(studentno, 2) Sheets("高三理").Select For i = 1 To studentno zf(i, 1) = ActiveSheet.Cells(i 1, 1) 注释:存放班级 zf(i, 2) = ActiveSheet.Cells(i 1, 11) 注释:存放总分 Next i For i = 1 To studentno For j = 1 To 4 注释:3---6班共4个班级 If zf(i, 1) = j 2 Then For k = max To min Step -10 low = Int((max 10 - k) / 10) If zf(i, 2) > k Then bjfsd(j, low) = bjfsd(j, low) 1 Next k End If Next j Next i Sheets("sheet3").Select For i = 3 To 6 For k = 1 To fsdnum ActiveSheet.Cells(i, k 1) = bjfsd(i - 2, k) Next k Next i Range("M3:W6").Select Selection.Cut ActiveWindow.LargeScroll ToRight:=-1 Range("B8").Select ActiveSheet.Paste End Sub ? 删除 Sub 删除() Sheets("33").Select ActiveWindow.SelectedSheets.Delete Sheets("34").Select ActiveWindow.SelectedSheets.Delete Sheets("35").Select ActiveWindow.SelectedSheets.Delete Sheets("36").Select ActiveWindow.SelectedSheets.Delete End Sub
/
本文档为【excel宏教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索