04 2011 档案

摘要:以前从没在Excel中利用VBA汇总过数据,其实在Excel中也几乎没有汇总过数据,主要要是因为很多时候汇总还不如直接计算来的直接。既然看到这儿了,就把汇总数据好好学习一下吧。 根据实际情况一般而言,需要汇总的数据源有两种:①在同一工作簿中的所有工作表或指定工作表;②不同工作簿中的指定工作表(这种情况下往往不会是所有工作簿中的所有工作表)。下面分情况解决: ①在同一工作簿中的所有工作表的汇总: 先... 阅读全文
posted @ 2011-04-29 19:52 surfacetension 阅读(1576) 评论(2) 推荐(0)
摘要:这个问题应该可以说几乎算不上问题的,就是从后往前逐个单元格进行检查就可以,只要为空,就将该单元格所在行删掉。但今天发现一个更快速的方法,利用specialcells方法,速度更快。冲着这个执行的速度,代码的简洁值得为它单写一篇博客。 代码非常简单: Sub 快速删除含有空白单元格的行() '下面代码均可以实现相同效果 Columns(1).SpecialCells(xlCellTypeBlanks... 阅读全文
posted @ 2011-04-29 17:58 surfacetension 阅读(3105) 评论(0) 推荐(0)
摘要:原来的问题是①如何实现从前向后查找或从后向前查找;②若查找不到的话,如何处理。 看不懂代码的感觉和看懂了并能进一步改进的感觉就是不一样啊。 不管想解决哪一个问题,都离不开find方法,所以按惯例(抄袭都成惯例,所以可以理解那些人为什么打嘴仗了……)先把官方解释给搬过来,因为我发现最权威的往往是官方解释,不服不行。 见谅啊,没办法,刚刚升级为G3.9,咱也不知道怎么回事,在VBA帮助文件里的东西复制... 阅读全文
posted @ 2011-04-29 16:49 surfacetension 阅读(5181) 评论(0) 推荐(0)
摘要:在前面已经用过Split函数了,可以方便的获取指定单元格的行标或列标,具体的用法可以参见以下代码: Sub 获取指定列的字母() Debug.Print Cells(1, 27).Address Debug.Print Split(Cells(1, 27).Address, "$")(1) End Sub 下面是关于Split函数的一些认识,肯定不全,但也得记下来,不然以后怎么再复习呢。切记:好记... 阅读全文
posted @ 2011-04-29 10:12 surfacetension 阅读(7156) 评论(0) 推荐(0)
摘要:1、如何复制 按平时的操作习惯可以知道,只需定位第1个位置即可。 '如果想通过复制/粘贴方式呢,只需指定第1个单元格即可. With Workbooks("验证Range.xls").Sheets(2) .Range("A1").CurrentRegion.Copy Destination:=Workbooks("book2.xls").Sheets(3).Range("A1") End With... 阅读全文
posted @ 2011-04-26 20:14 surfacetension 阅读(2595) 评论(0) 推荐(0)
摘要:改进主要集中在标准答案选项的组合提取;各题得分的判断. ①将学生答案进行分列处理: 原效果图: Sub 分列操作() Dim i As Integer, totalR As Integer, j As Integer totalR = Range("A65536").End(xlUp).Row For i = 2 To totalR For j = 1 To Len(Cells(i, 4).Val... 阅读全文
posted @ 2011-04-20 07:58 surfacetension 阅读(412) 评论(0) 推荐(1)
摘要:问题提出:由于阅卡机的原因,导致无法提取单科成绩,这个程序就是解决这个问题. 代码如下: (1)取得标准选项的各种组合 需要准备的数据:题号及标准选项,C列及后续列为程序生成. Sub 取得标准选项的各种组合() Dim totalR As Integer, i As Integer Worksheets("答案").Activate totalR = Range("A65536").End(xl... 阅读全文
posted @ 2011-04-17 09:18 surfacetension 阅读(310) 评论(0) 推荐(0)
摘要:Sub 保存工作簿的3种方法() ActiveWorkbook.Save '保存当前活动工作簿的变化 ActiveWorkbook.SaveAs Filename:="c:\windows\xiehui.xls" '将当前活动工作簿另存 ActiveWorkbook.SaveCopyAs Filename:="c:\windows\xiehui.xls" '这行代码可以实现备份的要求. Activ... 阅读全文
posted @ 2011-04-15 19:30 surfacetension 阅读(1272) 评论(0) 推荐(0)
摘要:问题:有处理学生评语,限于网络条件,往往学生提交的都是单个文件,这就需要将其一一提取出来,然后进行判断、导出等操作,但首先要解决的就是查找所有文件如何操作,这里需要用到Dir函数,当然创建一个文件搜索对象也可以。 Dir 函数 返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。 语法 Dir[(pathname[, attributes... 阅读全文
posted @ 2011-04-15 10:02 surfacetension 阅读(3550) 评论(1) 推荐(0)
摘要:问题提出:默认情况下,新建工作簿时都是给出3张工作表,如果在让老师们整理一些材料时,不清楚的老师往往乱点,如果一个工作簿只有1张工作表的话,就可以有效地避免这个现象。 解决代码: Sub AddNewWorkbook() Workbooks.Add Template:=xlWBATWorksheet '以工作表作为模版,此时只建立一张工作表 Workbooks.Add '若不加模版参数,则为默认3... 阅读全文
posted @ 2011-04-15 08:46 surfacetension 阅读(717) 评论(0) 推荐(1)
摘要:问题背景:经常性的要对同一工作簿中的多个工作表同时进行格式设置等,那就需要首先先对其进行选定,建立工作表组,然后才能对进行操作. 问题提出:①如何快速选定同一工作簿中所有工作表?②如何选定部分工作表? 解决代码: ①如何快速选定同一工作簿中的所有工作表? Sub 快速选定所有工作表() Dim sht As Worksheet For Each sht In Worksheets sht.Sele... 阅读全文
posted @ 2011-04-14 13:31 surfacetension 阅读(1327) 评论(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 阅读(2541) 评论(0) 推荐(0)
摘要:问题背景:很多时候想对工作表进行操作,但往往不知道此表是否已经存在,比如想添加一新工作表,并对其进行命名,但如果命名发生冲突,则会引发错误,甚至会导致程序中断. 问题提出:如何判断指定工作表是否存在 解决代码:函数判断是否存在,在过程中调用此函数,并做进一步操作,比如添加新表/删除此表等. Function ExistSheet(ShtName As String) As Boolean Dim ... 阅读全文
posted @ 2011-04-14 07:43 surfacetension 阅读(2110) 评论(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 阅读(1967) 评论(0) 推荐(1)
摘要:问题提出:如何批量删除不需要的工作表? 解决方案:首先需要选定不能删除的工作表,统计出个数,将其移至工作簿所有工作表的最前边,利用统计的个数设置循环操作,逐一删除未选定的工作表. 代码: Sub 批量删除工作表() Dim n As Integer, i As Integer n = ActiveWindow.SelectedSheets.Count '统计当前窗口选择的工作表数量 ActiveW... 阅读全文
posted @ 2011-04-12 07:39 surfacetension 阅读(675) 评论(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 阅读(1182) 评论(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 阅读(3626) 评论(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 阅读(713) 评论(0) 推荐(0)
摘要:在使用VBA编写过程时,一个好的习惯是尽量将实现单独功能的代码放置在独立的过程中,并在主过程中调用这些独立的过程.这样不仅便于程序的高度,而且程序的结构清晰,便于理解和维护,也能够重复使用通用的过程代码. 通过一个示例演示在程序中调用过程的方法.如图所示工作表,其中"加班费基数"固定,每个加班为80元,"加班数"由人工输入,"加班系数"根据加班个数而不同."加班费"为"加班费基数"和"加班数"分别... 阅读全文
posted @ 2011-04-11 19:46 surfacetension 阅读(1457) 评论(0) 推荐(0)
摘要:一、高级筛选功能的学习与掌握 以前从未用过高级筛选,原因就是不会,试了好多次,总是在将筛选结果得到其他区域时提示:只能将复制到筛选后的活动工作表,搞了半天也没明白是什么意思。 到网上查了一下,一位仁兄的话点醒了我。摘录如下: 高级筛选只能将数据复制到活动的单元格。所以要在复制到的位置上(包括原表或新表中)进行筛选操作,而不是数据表上。 也就是说不论你是在原有区域显示筛选结果还是将筛选结果复制到其他... 阅读全文
posted @ 2011-04-11 19:34 surfacetension 阅读(3885) 评论(1) 推荐(0)