摘要: 问题背景:经常性的要对同一工作簿中的多个工作表同时进行格式设置等,那就需要首先先对其进行选定,建立工作表组,然后才能对进行操作. 问题提出:①如何快速选定同一工作簿中所有工作表?②如何选定部分工作表? 解决代码: ①如何快速选定同一工作簿中的所有工作表? Sub 快速选定所有工作表() Dim sht As Worksheet For Each sht In Worksheets sht.Sele... 阅读全文
posted @ 2011-04-14 13:31 surfacetension 阅读(1268) 评论(0) 推荐(0) 编辑
摘要: 问题提出:实际上自己感觉用处不是很大,非得需要将工作表进行排序吗?只要能访问不就可以吗?但既然提出来了,就看看吧,而且里面有个算法对我很有价值,就是排序算法,以前遇到需要排序的要求,心里就害怕,这次就借着这个问题,把它解决吧. Sub 工作表按升序排序() Dim i As Integer, j As Integer, n As Integer Dim Sht() As String, t As ... 阅读全文
posted @ 2011-04-14 09:15 surfacetension 阅读(2464) 评论(0) 推荐(0) 编辑
摘要: 问题背景:很多时候想对工作表进行操作,但往往不知道此表是否已经存在,比如想添加一新工作表,并对其进行命名,但如果命名发生冲突,则会引发错误,甚至会导致程序中断. 问题提出:如何判断指定工作表是否存在 解决代码:函数判断是否存在,在过程中调用此函数,并做进一步操作,比如添加新表/删除此表等. Function ExistSheet(ShtName As String) As Boolean Dim ... 阅读全文
posted @ 2011-04-14 07:43 surfacetension 阅读(2045) 评论(0) 推荐(0) 编辑
摘要: ①问题提出:如何判断指定工作表为空? 解决方案:利用Excel函数CountA统计指定工作表中的非空单元格,若为0,即为空工作表. 代码: Sub 判断指定工作表是否为空() If Application.WorksheetFunction.CountA(Worksheets(1).UsedRange.Cells) = 0 Then MsgBox "空工作表!" & "是否删除?" Workshe... 阅读全文
posted @ 2011-04-12 09:50 surfacetension 阅读(1893) 评论(0) 推荐(1) 编辑
摘要: 问题提出:如何批量删除不需要的工作表? 解决方案:首先需要选定不能删除的工作表,统计出个数,将其移至工作簿所有工作表的最前边,利用统计的个数设置循环操作,逐一删除未选定的工作表. 代码: Sub 批量删除工作表() Dim n As Integer, i As Integer n = ActiveWindow.SelectedSheets.Count '统计当前窗口选择的工作表数量 ActiveW... 阅读全文
posted @ 2011-04-12 07:39 surfacetension 阅读(655) 评论(0) 推荐(1) 编辑
摘要: 使用Worksheet对象的Delete方法能删除指定的工作表: Worksheets(3).Delete 那如何判断是否已经删除了呢?由于Delete方法返回一个布尔值,所以可以利用这点来进行判断。 Sub 删除指定工作表() Dim bDeleted As Boolean bDeleted = Worksheets(3).Delete If bDeleted = True Then MsgBo... 阅读全文
posted @ 2011-04-11 20:51 surfacetension 阅读(1144) 评论(0) 推荐(0) 编辑
摘要: 使用Worksheets集合或Sheets集合的Add方法可以实现在指定位置添加新工作表,并且添加后的新工作表自动为活动工作表。 Sub 插入新工作表并改名() With Worksheets .Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = "ExcelHome" End With End Sub 上面的程序可以实现在当前工作... 阅读全文
posted @ 2011-04-11 20:33 surfacetension 阅读(3429) 评论(0) 推荐(0) 编辑
摘要: 1.使用工作表名称Worksheets("sheet2").ActivateSheets("sheet3").Activate这两行命令均可以实现按工作表名称激活相应工作表,唯一的区别就是Worksheets包含工作簿中所有工作表,而Sheets除了工作簿中的所有工作表外,还包含图表(Charts)/宏表等.2.使用索引号工作表索引号是工作表在工作簿中的位置,Excel根据工作表在工作表标签中的位置以1开始从左向右进行编号.下例表示激活当前工作簿中的第2个工作表.Worksheets(2).SelectSelect方法与Activate方法唯一的区别就是 阅读全文
posted @ 2011-04-11 20:00 surfacetension 阅读(690) 评论(0) 推荐(0) 编辑
摘要: 在使用VBA编写过程时,一个好的习惯是尽量将实现单独功能的代码放置在独立的过程中,并在主过程中调用这些独立的过程.这样不仅便于程序的高度,而且程序的结构清晰,便于理解和维护,也能够重复使用通用的过程代码. 通过一个示例演示在程序中调用过程的方法.如图所示工作表,其中"加班费基数"固定,每个加班为80元,"加班数"由人工输入,"加班系数"根据加班个数而不同."加班费"为"加班费基数"和"加班数"分别... 阅读全文
posted @ 2011-04-11 19:46 surfacetension 阅读(1430) 评论(0) 推荐(0) 编辑
摘要: 一、高级筛选功能的学习与掌握 以前从未用过高级筛选,原因就是不会,试了好多次,总是在将筛选结果得到其他区域时提示:只能将复制到筛选后的活动工作表,搞了半天也没明白是什么意思。 到网上查了一下,一位仁兄的话点醒了我。摘录如下: 高级筛选只能将数据复制到活动的单元格。所以要在复制到的位置上(包括原表或新表中)进行筛选操作,而不是数据表上。 也就是说不论你是在原有区域显示筛选结果还是将筛选结果复制到其他... 阅读全文
posted @ 2011-04-11 19:34 surfacetension 阅读(3789) 评论(1) 推荐(0) 编辑
摘要: Offset 属性 (Range 对象)返回一个 Range 对象,该对象代表某个指定区域以外的区域。只读。expression.Offset(RowOffset, ColumnOffset)expression 必需。该表达式返回一个 Range 对象。RowOffset Variant 类型,可选。该区域将偏移的行数(正值、负值或 0(零))。正值表示向下偏移,负值表示向上偏移,默认值为 0。ColumnOffset Variant 类型,可选。该区域将偏移的列数(正值、负值或 0(零))。正值表示向右偏移,负值表示向左,默认值为 0。示例本示例激活 Sheet1 上活动单元格向右偏移三列 阅读全文
posted @ 2011-03-03 11:57 surfacetension 阅读(1560) 评论(0) 推荐(0) 编辑
摘要: VBA语句集100句(第1辑)我将学习VBA过程中常用的语句进行了归纳,希望能对Excel爱好者和VBA初学者有所帮助.VBA语句集(第1辑)定制模块行为(1) Option Explicit '强制对模块内所有变量进行声明Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 Option Compare Text '字符串不区分大小写 Option Base 1 '指定数组的第一个下标为1(2) On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息(3) On 阅读全文
posted @ 2010-10-15 12:12 surfacetension 阅读(367) 评论(0) 推荐(0) 编辑
摘要: ①设置单元格的值直接使用Value属性②设置公式是用Formula属性,一般以等号开头. 以下例子均已运行通过:[1] ActiveCell.Value = 23 * 10[2] ActiveCell.Offset(1, 0).Formula = 23 * 10[3] ActiveCell.Formula = "=23*10"[4] ActiveCell.Value = "=23*10" [1]与[2]没什么区别,实际上[3]与[4]也没有什么区别,一样都可以执行的.但是按网上及系统自带帮助的解释,如果牵到公式的话,最好还是用Formula属性比较好些. 阅读全文
posted @ 2010-09-03 11:57 surfacetension 阅读(1618) 评论(0) 推荐(0) 编辑
摘要: SpecialCells 方法返回一个 Range 对象,该对象代表与指定类型及值相匹配的所有单元格。Range 对象。 expression.SpecialCells(Type, Value) expression 必需。该表达式返回“应用于”列表中的一个对象。 Type XlCellType 类型,必需。要包含的单元格。 XlCellType 可为以下 XlCellType 常量之一。xlCellTypeAllFormatConditions 任意格式单元格xlCellTypeAllValidation 含有验证条件的单元格xlCellTypeBlanks 空单元格xlCellTypeCo 阅读全文
posted @ 2010-08-13 12:03 surfacetension 阅读(2678) 评论(0) 推荐(0) 编辑
摘要: 关于课程表的程序编写,这已经是第二次修订了,暑假开学前为高一、高二、高三准备了课程表,期间也发现了不少问题,现在想对以前的问题做一个修正,以便于下次再用时可以更具通用性。1.首先要有一张全年级的总课程表,样式如图所示:(工作表名字:kcb)其中A列表示节次,第1行由B列以后表示班级,要求:班级必须是由小到大依次排列。为什么首先要求有总课程表(kcb)呢?因为一张课程表排完后,靠人工很难保证不会出现重课现象,而检测重课就是做好课表的第一步工作,思路就是利用kcb填充上教师姓名,然后检测同一行中是否会重名现象,若有,必是重课现象,就可以进行修正了。基于以上考虑,在编写时就首先要有这张表才可以。同时 阅读全文
posted @ 2010-08-03 12:04 surfacetension 阅读(422) 评论(0) 推荐(0) 编辑
摘要: Sub 测试数组的常见操作() Dim arr() Dim totalR As Integer totalR = Range("A65536").End(xlUp).Row '值为12 arr = Range(Cells(1, 1), Cells(totalR, 2)).Value '共12行 Debug.Print LBound(arr) '值为1 Debug.Print UBound(arr) '值为12 '通过水平转置,可以将数据原为两列,改为两行.也证明了arr数组默认为列. '将整个数组经水平转置后赋值给相同范围的单 阅读全文
posted @ 2010-05-11 12:04 surfacetension 阅读(732) 评论(0) 推荐(0) 编辑
摘要: Sub 字典功能应用() Dim i As Integer, arr() Dim dic As Object, wb As Object Dim kl As Integer For kl = 1 To 2 Set wb = GetObject(ThisWorkbook.Path & "\汇总数据调整格式版.xls") ‘数据源 With wb.Sheets("sheet1") i = .Range("A65536").End(xlUp).Row arr = .Range("A1").Resize(i, 2) 阅读全文
posted @ 2010-05-11 12:04 surfacetension 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 前面关于各班各科成绩统计分析的已经写了两篇了,刚刚看了看,发现总是有这样那样的毛病,既然今天下午没有什么事,干脆就重新整理一下吧.按现在的考试流程分析,可以分为以下几步:①一卷成绩的导入/二卷成绩的导入;②按理类/科目将一/二卷合并;③计算总分;④分析成绩,并计算总名次及班名次.其中分析成绩基本有两种类型,一种是按类似50名一段进行分析,统计各班各科各名次段人数,另一种是按指定名次进行分析;此外,还需要计算各班各平的平均分(这一步一般是将各班各科后5名学生去掉,因为后5名的学生往往都是未参加考试.)第1步:关于一/二卷成绩的导入,格式要求:A列为考试号,B列为I卷或II卷成绩,顺序无所谓,文件 阅读全文
posted @ 2010-05-09 12:05 surfacetension 阅读(564) 评论(0) 推荐(0) 编辑
摘要: 这次的任务比较简单,就是把理科各科后60名的学生提出来。不再多说,直接上图:这是处理前的样式。在处理前,遵从错误可以挽回的原则,应该在处理前先做一个备份,或者说创建一个副本以便于处理。源程序如下:Option Base 1Sub 提取补考学生名单理科各科后60名() Dim fs(6) As Double, i As Integer, totalR As Integer, mycell As Range Worksheets("sheet1").Activate ActiveSheet.Copy before:=Sheets(1) ActiveSheet.Name = &q 阅读全文
posted @ 2010-05-03 12:08 surfacetension 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 以前的操作方式是首先将要提取数据工作簿打开,获得要复制的区域,然后再激活目标工作簿,将数据复制进去,时间上太慢,现在学会了创建工作簿对象,由于不需要在源工作簿中写入数据,只是取得数据即可,所以不需打开源工作簿,利用创建工作簿对象即可.再一个,既然格式相同,往往源工作簿的文件名也具有相似的命名规则,再者,即使是不相似也无所谓,可以通过创建一个文件搜索对象,在指定文件夹中搜索特定文件,然后将其保存到数组中,利用它就可以创建工作簿对象.先看一下工作簿所在的文件夹样式:这是把所有需合并的工作簿都放在了同一文件夹下,(一会再考虑如果在不同文件夹下,是否可行?!!)现在要求做的是将xx***.xls合并到 阅读全文
posted @ 2010-05-03 12:05 surfacetension 阅读(1105) 评论(0) 推荐(0) 编辑
摘要: 目前为止,发现了几个在处理数据时非常有用的对象,分别是:Workbook对象/FileSearch对象/Dictionary对象/Range对象其中Range对象不用说,在遍历单元格时特别有用,而且速度超快,基本用法就是For each………in………Workbook对象在需要从工作簿中读取数据(但不写入)时,非常有用,用此对象可以不用打开源工作簿,从而可以大大节省时间.FileSearch对象在需要大批量读取文件名,尤其是不知道有多少个文件名,比如在处理学生单个评语文件时(*.doc或*.xls)特别有用,利用它可以搜索指定文件夹下的特定条件,然后可以实现大批量读写.关于Workbook对象 阅读全文
posted @ 2010-04-09 12:05 surfacetension 阅读(428) 评论(0) 推荐(0) 编辑
摘要: Sub 合并相同格式的工作簿至同一工作簿() Dim i As Integer, arr() Dim dic As Object, wb As Object For j = 1 To 23 '只有23个班,故设为23 Set wb = GetObject(ThisWorkbook.Path & "\" & Trim(Str(j)) & "班\" & "sy.xls") With wb.Sheets("sheet1") i = .Range("A65536" 阅读全文
posted @ 2010-04-05 12:05 surfacetension 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 可捕获的错误 可捕获的错误通常发生在应用程序运行时,但也有一些会发生在开发期间或编译时间。可使用 On Error 语句与 Err 对象来探测并回应可捕获的错误。1 – 1000 之间未使用的错误号都是保留给 Visual Basic 以后使用的。3没有返回的GoSub5无效的过程调用6溢出7内存不足9数组索引超出范围10此数组为固定的或暂时锁定11除以零13类型不符合14字符串空间不足16表达式太复杂17不能完成所要求的操作18发生用户中断20没有恢复的错误28堆栈空间不足35没有定义 子程序、函数,或属性47DLL 应用程序的客户端过多48装入 DLL 时发生错误49DLL 调用规格错误5 阅读全文
posted @ 2010-04-04 12:06 surfacetension 阅读(1597) 评论(1) 推荐(0) 编辑
摘要: 上一次学生评语的导入问题,因为当时不会从word中导入,所以只能要求学生用Excel填写,然后导入到大表当中去的,在实际操作中发现学生对Excel并不熟悉,导致了出现了大量的错误,学生比较熟悉的还是Word,所以现在这个程序就是来解决如何从Word中读取学生评语,然后导入到Excel中指定单元格中。由于只是要求学生把3个学期的评语分成三段来书就可以,这样应该可以更加减少学生出错的机率。原始文件的存放格式如下图所示:保证文件格式以及存放位置如上图所示。一、将word版评语转化为Excel版评语:Sub 将word评语转换成Excel评语() Dim sr As FileSearch '定 阅读全文
posted @ 2010-04-03 12:12 surfacetension 阅读(960) 评论(0) 推荐(0) 编辑
摘要: 现在看来关于VBA中的错误处理语句,应该主要有三种形式:①On Error Resume Next;②On Error Goto 0;③On Error Goto ErrorHnadler.可以说这三种就涵盖了几乎所有的错误处理语句.下面是关于这三种错误处理语句的一点认识:启动一个错误处理程序并指定该子程序在一个过程中的位置;也可用来禁止一个错误处理程序。语法On Error GoTo lineOn Error Resume NextOn Error GoTo 0On Error 语句的语法可以具有以下任何一种形式:语句描述On Error GoTo line启动错误处理程序,且该例程从必要的 阅读全文
posted @ 2010-04-02 12:06 surfacetension 阅读(1661) 评论(1) 推荐(0) 编辑
摘要: 补考结束了,现在出现了一个问题,收的补考费与人数对不起来,按说根本不用我管,但本着学习的态度,还是帮他们一把吧,现在需要解决的问题是如何统计各班补考人数?本来想着用countif函数进行统计,但如果用countif函数的话只能涉及一个条件而现在需要统计的两个条件下的人数(即班级、补考标记),没见过多条件应用的例子。先附上countif函数的16种常用用法:COUNTIF函数的16种公式设置1、返加包含值12的单元格数量=COUNTIF(DATA,12)2、返回包含负值的单元格数量=COUNTIF(DATA,"<0")3、返回不等于0的单元格数量=COUNTIF(DAT 阅读全文
posted @ 2010-04-01 12:07 surfacetension 阅读(745) 评论(0) 推荐(0) 编辑
摘要: 这段时间写的程序也少了,可能是真正的会了,也就这么回事了。但这几天一直在想一个问题,如何操作文件及文件夹,虽然以前也零零碎碎写了一点,但一直没有好好整理过,都是到用时再查找资料,要求也不高,只要能过关就行。现在想着趁着还能上网,还是抓紧时间整理一下吧。想要解决的问题如下:⒈在指定工作簿中①如何添加新工作表,并重命名;②如何删除指定工作表,并不出现提示;③如何统计工作表的个数;④如何将指定工作表移动到新工作簿或更改次序;⑤如何保存文件,包括直接保存及另存为。⒉如何遍历指定文件夹下的指定文件,并将其保存到工作表。⒊如何按指定格式更改文件名。以上3个问题应该可以涵盖现在遇到的情况,下面一一解决。①如 阅读全文
posted @ 2010-03-29 12:07 surfacetension 阅读(1967) 评论(0) 推荐(0) 编辑
摘要: 以前都是要麻烦别人,但现在自己也可以解决了。首先要保证一点:教师姓名必须要保持一致,写的过程就发现了有些老师的姓名前后不一致导致最终结果里面没有他们的课程表(为空)。需要准备的文件(所有表格均存放在同一工作簿中):①任课教师表(jsb)如下图所示:(特别注意,必须按班级顺序排序!!)②课程表(kcb)如下图所示:(首行必须做成如图所示样式,因为需要在此表中填写任课教师的姓名。)③教师课程表(jskcb)如下图所示;(用于存储最终结果,此表最终为空表。)④教师代码表(jsdmb)如下图所示:准备好以下四张表后,就可以按如下源程序进行提取教师课程表:Sub 取消合并单元格并保留内容() Dim s 阅读全文
posted @ 2010-03-26 12:08 surfacetension 阅读(2226) 评论(1) 推荐(0) 编辑
摘要: 一直想着能通过程序直接指定各种数据的类型,但一直没有实现,因为以前实现起来比较麻烦,今天上午有了一点头绪,整理如下:通过在VBA中运行format函数与numberformat、numberformatlocal等,感觉如果涉及到日期型数据,用format函数方便些,如果涉及到比如小数点后取两位的情况用numberformatlocal属性更好些。关于如果转换日期型数据的格式,举例如下:Cells(1, 1).Value = "2010年5月1日" 注:先给定个样式,以便于下面进行各种验证。⑴Cells(1, 2).Value = Format(Cells(1, 1).Va 阅读全文
posted @ 2010-03-24 12:08 surfacetension 阅读(766) 评论(0) 推荐(0) 编辑
摘要: 共有两个大问题需要解决:①如何按百分比提取需要补考学生名单;②如何把两次同科需要的学生改为只需补考一次即可。第1个问题已经解决,充分利用Application.WorksheetFunction.Percentile(Range(Cells(2, 5), Cells(totalR, 5)), 1 - (50 + (i - 1) * 50) / totalR)就可以解决。现在主要是想来解决第2个问题:以第5学段文科及第6学段文科为例:原表示意如下:其中图1为第5学段示意图,图2为第6学段示意图。由于不可避免的5、6学段中肯定会有重复的学生。所以现在需要做的就是如何把在第6学段中存在且在第5学段也 阅读全文
posted @ 2010-03-23 12:11 surfacetension 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 以前按班打印成绩时都是在每个学生旁边都带着班级号,虽然在电脑里无所谓,但打印到纸上时,一般都是按班级打印,这样的话,就显得有点烦琐,既然每个班级的所有学生都在一张纸上,那就没有必要让每个学生都带着班号,只需在页眉或页脚处添加上班号就可以了.但很明显的在电脑里每个学生都要有班号,不然就无法按班级提取了.原工作表如下图所示:如上图所示,开始写程序前要将第1列即班级列放在可打印区域外,但不能删掉,因为如果删掉的话,就无数据可提了.完成后的效果如下图所示:此图中的班级号在页脚处,也可以放在页眉处.整理后的源程序如下:Sub 利用字典功能实现自定义页眉页脚功能如班级号班主任姓名等并实现严格按班号打印() 阅读全文
posted @ 2010-03-22 12:11 surfacetension 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 程序目的:利用字典实现将1至10填入指定单元格Sub 显示10() Dim arr Dim dic As Object, i As Long, s As String Set dic = CreateObject("Scripting.Dictionary") '创建字典 For i = 1 To 10 dic.Add i, " " '将数字写入字典 Next s = Join(dic.keys, " ") Debug.Print s arr = Split(s, " ") '锯一锯 arr 阅读全文
posted @ 2010-03-21 12:11 surfacetension 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 问题的提出:可以说学校学生的成绩和名次是最重要,虽然现在要求不能向学生公布成绩,但学校内部评比时还是要看成绩的!!以前计算各科的总分时都是用鼠标直接往下拉,现在已经实现了自动化。就是在循环中调用Sum函数就可以。现在想的是如何确定每位学生学生的①单科的级部名次;②单科的班内名次(此项主要是可以用来计算班内前N名的平均分,也算是比较有用。)③总分的级部名次;④总分的班内名次(此项主要是可以让班主任便于分析本班成绩;同时还可以用来计算班内前N名的平均分。)问题的分析:①和③可以合并到一块处理;②和④可以合并到一块处理,但①→④都要依赖于总分已经计算完的基础上。问题的解决过程:⑴如何计算单科及总分的 阅读全文
posted @ 2010-03-19 12:12 surfacetension 阅读(4007) 评论(1) 推荐(0) 编辑
摘要: 一、关于sumif()函数的用法说明及用途。根据指定条件对若干单元格求和。语法SUMIF(range,criteria,sum_range)Range 为用于条件判断的单元格区域。Criteria 为确定哪些单元格将被相加求和的条件,其形式可以为数字、表达式或文本。例如,条件可以表示为 32、"32"、">32" 或 "apples"。Sum_range 是需要求和的实际单元格。说明只有在区域中相应的单元格符合条件的情况下,sum_range 中的单元格才求和。如果忽略了 sum_range,则对区域中的单元格求和。Micros 阅读全文
posted @ 2010-03-18 12:12 surfacetension 阅读(16036) 评论(2) 推荐(0) 编辑
摘要: 问题提出的背景:现在实行素质教育后,不允许给学生公布成绩了,只允许以A、B、C、D的形式进行公布,以前都是在VFP中进行,但需要来回的转换格式,很是烦锁,尤其是在转换时,需要一科科的进行数据格式的转换还往往出问题,如果在Excel里就可以直接转换的话,那肯定可以节省很多时间。问题解决的思路:因为只能有A、B、C、D四个等第,所以可以利用Select Case语句来解决,而且以前最熟悉的是IF语句,现在想知彻底解决条件判断语句的用法。就以这个作为一个例子吧。首先根据成绩及A、B、C、D四个等第的比例进行等第确认,源程序如下:Sub 等第确认() '打开zcj工作表 Dim mycell 阅读全文
posted @ 2010-03-16 12:12 surfacetension 阅读(1066) 评论(1) 推荐(0) 编辑
摘要: 以前都是在Excel中做好数据,诸如字段名,各科及总分的名次(还要用rank函数),然后再导入到VFP中进行处理,明显的效率太低,主要是来回的转化实在是烦人.现在可以在Excel中进行处理了.先看一下原文件是如何布局的,如下图所示:从上表中可以看出,一般拿到手的成绩表也就是这种格式(不过这里有个问题,如何把级名次和班名次添加上?刚才在网上找了一个,除了用字典,还有就是充分利用sort函数了.我以前也是用的这个方法,一会把这种方法也整理一下).现在想做的就是不改动格式的前提下,如何在另一工作表中生成各班各科及总分的各分数段人数?源程序如下:Sub 提取各班各科各分数段人数并计算总分级名次及班名次 阅读全文
posted @ 2010-03-14 12:12 surfacetension 阅读(2378) 评论(1) 推荐(1) 编辑
摘要: 成绩分析还有一个问题就是计算平均分。考虑到各班均有不参加考试的学生,为了公平起见,往往是取前多少名(比如一个班有50名学生,往往都是取前40名或前45名的学生计算平均分)进行计算。现在就来实现这个问题。源程序如下:Sub 计算各班各科及总分的平均分() Dim rs(25), i, j, k As Integer Dim totalR As Integer Dim pj(25) As Double Dim km(9) As String km(1) = "语文" km(2) = "数学" km(3) = "外语" km(4) = &q 阅读全文
posted @ 2010-03-13 12:12 surfacetension 阅读(2562) 评论(0) 推荐(0) 编辑
摘要: 今天下午在整理学生模块成绩时,突然发现学生的模块成绩表中的班级是教学班,而发展报告是要求按行政班进行填写的.就有个问题了:如何按学籍号(因为发展报告只需要用学籍的学生填写),而现在就要把模块成绩表中的班级号改成行政班号.其实以前也遇到过类似问题,都是用笨法,复制/粘贴然后排序,一个个的查找看看是否有漏掉的.实在是麻烦,现在可以利用Excel中的函数Match来解决了.原理:返回在指定方式下与指定数值匹配的数组 (数组:用于建立可生成多个结果或可对在行和列中排列的一组参数进行运算的单个公式。数组区域共用一个公式;数组常量是用作参数的一组常量。)中元素的相应位置。如果需要找出匹配元素的位置而不是匹 阅读全文
posted @ 2010-03-11 12:12 surfacetension 阅读(1078) 评论(0) 推荐(0) 编辑
摘要: 3月6日发表的同题的文章,现在想想其实只能算是小儿科,因为那个程序一方面太繁琐,另一方面还有着更致命的问题:如果遇到查不到的项目,那么很容易就会引起错误,从而得到错误的结果.现在可以借助字典功能来实现更科学的查询,更严谨的结果.分析如下:表一为"一中二中信息总表.xls"示意图:此表存储着所有学生的班级/姓名/学籍号.此为需要查询的目的表.表二是需要填入班级号(行政班)的"第6学段模块学习成绩表.xls"的样表:此表为需要填入班级号,假设其中已填写的班级号为教学班班级号,现在需要按注册学籍号从表一中提取对应原班级号,并填入表二中相应位置.以前都是利用查找 阅读全文
posted @ 2010-03-10 12:12 surfacetension 阅读(399) 评论(1) 推荐(0) 编辑
摘要: 1.Excel程序设计可以归纳为对对象的处理。2.工作簿就是一个“工程”。3.在立即窗口(快捷键CTRL+G)中,可以用"?"代替”debug.print”,这样书写起来应该更省事些.下面验证一下是否在VBA程序中也可以这样代替. 验证之后的结论:"?"只能在立即窗口中使用,如果在编辑窗口中使用的话,会被自动替换成Print,而导致错误.4.如果要求变量声明的话,可以在工程开始处加上:Option Explict 这样如果后面所有的工程进行变量定义时没有提前定义的话,就会得到提示.5.关于Resize的认识:Sub Macro4() Range(&quo 阅读全文
posted @ 2010-03-09 12:12 surfacetension 阅读(328) 评论(0) 推荐(0) 编辑