Access编程交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • Excel2000 应用案..
  • 谈Excel2000数据透..
  • Excel工作表使用小技巧
  • 查找+格式刷的妙用
  • VBA系列讲座(1):VB..
  • Excel2000 应用案..

最新文章

  • 在 Excel中 打开Ac..
  • 为选择的区域添加边框
  • 如何在Excel中使用文件..
  • 用快捷键实现相对引用和绝对..
  • 【技巧】Excel控制特定..
  • Excel技巧集锦

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > Excel技巧 > Excel应用与操作
Excel应用与操作

Excel中对交叉内容进行报表合并

在学校的成绩统计中,有的老师会遇到这样的问题:比如说手头有两份成绩报表,一份是语文成绩,另一份是数学成绩,现在需要将这两份成绩报表合并起来,并计算出总分。本来这在Excel中是非常容易实现的事情,但这还不算,最大的困难在于这两份成绩报表中的学生情况并不一致,即有一部分学生只有单科成绩,这样一来,两份成绩报表中的学生名单就出现了交叉(既有相同部分,又有不同部分)。对于这种问题,我们应该怎样解决呢?
    有的人可能会想到用VBA写一段代码来完成这样的工作,但毕竟这东东不是每个人都会的,单为了这么点小事情去专门学习VBA,又显得有些小题大做了。况且这摆在眼前的工作,哪里来得及等你去学习VBA。(等你学好了,估计也要下岗了!)其实,会者不难,只要你能灵活运用Excel中的函数与公式,这个问题也是能被轻松解决的。
    在介绍笔者的具体方案之前,请大家先耐心来进行一些有关此方案的Excel函数及公式知识的准备工作。(先别急嘛,所谓磨刀不误砍柴功!)
    首先我们要来学习的是Excel中的COUNTIF函数。COUNTIF (range,criteria) 函数的功能是计算给定区域内满足特定条件的单元格的数目。Range 参数是需要计算其中满足条件的单元格数目的单元格区域。而Criteria参数则用以确定哪些单元格将被计算在内的条件,其形式可以为数字、表达式或文本。假设 A1:A5 中的内容分别为 “张三”、“李四”、“王五”、“张三”、“张三”,则COUNTIF (A1:A5," 张三") 等于3。
    接下来上场的是笔者最钟情的VLOOKUP函数,它在笔者的工作中无数次发挥了巨大的威力,其作用可能仅次于IF和SUM函数,所以笔者在此向大家吐血推荐!(作广告?)VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)函数的功能是在表格或数值数组的首列查找指定的数值,并由此返回表格或数组当前行中指定列处的数值。Lookup_value参数为需要在数据表第一列中查找的数值。Table_array 参数为需要在其中查找数据的数据表,可以使用对区域或区域名称的引用,例如数据库或数据清单。Col_index_num 参数为 table_array 中待返回的匹配值的列序号。Col_index_num 为 1 时,返回 table_array 第一列中的数值;col_index_num 为 2,返回 table_array 第二列中的数值,以此类推。最后一个参数Range_lookup为一逻辑值,指明函数 VLOOKUP 返回时是精确匹配还是近似匹配。当其值为0时,将返回精确值;当其值为1时,将返回近似匹配值。关于VLOOKUP函数,在Excel的帮助文件中有非常详细的解释,本文限于篇幅的原因不能在此讲得更多,大家有兴趣的话可以自己进行学习。
    另外在下面的方案中还将用到一些别的函数,如IF、ISNA等,就不单独介绍了,笔者将在介绍方案时一并向大家讲解。最后我们要了解的是关于Excel公式中绝对引用和相对引用的概念。相对引用是指公式中对单元格或单元格区域的引用仅仅是相对于包含公式的单元格的相对位置。引用的源单元格或单元格区域会随着公式所在单元格的改变而改变。例如A1单元格包含公式 =B1,当我们把A1的公式复制到A2后,则A2单元格包含公式 =B2,B1自动被调整为B2了。这一点在大量复制公式时特别有用,因此也是Excel公式的默认引用方式。绝对引用与相对引用恰恰相反,无论公式所在单元格怎么变动,引用的源单元格或单元格区域也不会发生任何改变。绝对引用的标识符是美元符号“$”。
好了,下面就来正式介绍此问题的解决方案了:假设已有工作簿文件“成绩单”,其工作表“语文”和“数学”分别是前文所说的两份成绩报表。
    新建一工作表,将其命名为“索引”,在A1、B1单元格中分别输入“索引”和“姓名”。选择“语文”工作表,将其中的学生姓名字段的所有内容全部复制到“索引”工作表中B列,接着再复制“数学”工作表的同样内容。复制完成后稍作检查,要保证“索引”工作表中B列的数据区域中不要有空单元格,否则会影响后面的公式。(当然,将公式设置得更为复杂的话,也可以忽略空单元格,但这个就请各位自己去摸索了)
    假设最后一个学生姓名在单元格B24,下面我们来为这些包含重复内容的学生姓名数据建立索引,以过滤掉重复内容。先在A2单元格中输入数字“1”,然后再在A3单元格中输入公式“=IF(COUNTIF(B3:$B$24,B3)>1,A2,1+A2)”。这个公式的含义是如果在单元格区域B3:B24中,单元格B3中的学生姓名的出现次数大于1的话,就返回A2——也就是公式所在单元格的上一个单元格的值,注意这里使用的是相对引用,此时即返回数值1;如果单元格B3中的学生姓名的出现次数不大于1的话,就返回另一个数值,该数值等于A2的值加上1。在表示单元格区域B3:B24时,笔者在标识该区域的结束单元格时用到了绝对引用,虽然实际上单元格B24后面已经没有任何数据了,但这样做一来是为了强调在编辑公式时需要养成良好的习惯,二来是为了与同一公式中的其它相对引用进行对比。绝对引用保证了COUNTIF函数不会超出指定范围,而相对引用又保证COUNTIF函数进行判断的条件每次都不同,且进行统计的范围每次都在缩小,如此才能避免对判断过的单元格进行重复统计。最后我们将单元格A3的公式向下进行拖曳到单元格A24,以进行公式的快速复制。这样,索引过程就完成了。结果如图一所示。

        access数据库
    有朋友可能要问了“有没有搞错,索引值怎么会有这么多相同的?”实际上,这个索引值是专门配合后面的VLOOKUP函数来使用的,光靠这个数字是没有用的。不过我还是可以告诉你,相同的索引值中,第一次出现的为有效索引值。
    再新建一工作表,将其命名为“汇总”。在A1、B1、C1、D1、E1单元格中分别输入“索引”、“姓名”、“语文”、“数学”、“总分”。在A2单元格中输入数字1,然后向下拖曳到单元格A25,得到从1到24的序列数。在B2单元格中输入公式“=VLOOKUP(A2,索引!$A$2:$B$24,2,0)”,参照前文对VLOOKUP函数的介绍,我们可以知道此公式的功能在于根据A列相应单元格的数值,在“索引”工作表指定区域中找到对应的数值,返回给当前的单元格。Lookup_value参数和Table_array 参数分别运用了相对引用和绝对引用,都是为了复制公式的需要。在此,我们还利用了VLOOKUP函数的另一个特性,即如果Table_array 中有多个值与Lookup_value对应,则函数仅响应第一个出现的值。现在明白为什么“索引”工作表中有多个重复值也没关系了吧!
    然后在C2和D2中分别输入公式“=IF(ISNA(VLOOKUP(B2,语文!$A$2:$B$13,2,0)),0,VLOOKUP(B2,语文!$A$2:$B$13,2,0))”、“=IF(ISNA(VLOOKUP(B2,数学!$A$2:$B$13,2,0)),0,VLOOKUP(B2,数学!$A$2:$B$13,2,0))”,用于根据B列中的学生姓名从“语文”和“数学”工作表中取得他们相应的成绩。ISNA()是用来判断VLOOKUP()的值是否有效的函数,即如果VLOOKUP()找不到相应的成绩时,ISNA()返回TRUE。再结合IF(),此公式的完整含义为如果相应的学生有对应的成绩,则返回他的成绩,否则为0。因为有许多学生只有单科成绩,所以这样的判断还是必要的,否则当VLOOKUP()找不到对应的成绩时,会返回值“#N/A”,不但难看,而且影响后面总分的计算。
    在E1单元格中输入公式“=C2+D2”就能得到总分,这个公式应该没什么好说的吧!
最后,同时选中C1、D1、E1单元格并往下进行拖曳以复制公式。怎么样,全都算好了吧!学生一个不多也一个不少,刚刚好,而且他们的成绩也一分不差,是不是很容易!见图二所示。

        access数据库
    好了,现在再回过头去理解一下方案中所有的公式,应该都是非常简单了的吧!按照本文的思路,如果出现类似的问题,相信也难不倒你啦!

              单击此处下下载示范工作簿个公式的含义是如果在单元格区域B3:B24中,单元格B3中的学生姓名的出现次数大于1的话,就返回A2——也就是公式所在单元格的上一个单元格的值,注意这里使用的是相对引用,此时即返回数值1;如果单元格B3中的学生姓名的出现次数不大于1的话,就返回另一个数值,该数值等于A2的值加上1。在表示单元格区域B3:B24时,笔者在标识该区域的结束单元格时用到了绝对引用,虽然实际上单元格B24后面已经没有任何数据了,但这样做一来是为了强调在编辑公式时需要养成良好的习惯,二来是为了与同一公式中的其它相对引用进行对比。绝对引用保证了COUNTIF函数不会超出指定范围,而相对引用又保证COUNTIF函数进行判断的条件每次都不同,且进行统计的范围每次都在缩小,如此才能避免对判断过的单元格进行重复统计。最后我们将单元格A3的公式向下进行拖曳到单元格A24,以进行公式的快速复制。这样,索引过程就完成了。结果如图一所示。

        access数据库
    有朋友可能要问了“有没有搞错,索引值怎么会有这么多相同的?”实际上,这个索引值是专门配合后面的VLOOKUP函数来使用的,光靠这个数字是没有用的。不过我还是可以告诉你,相同的索引值中,第一次出现的为有效索引值。
    再新建一工作表,将其命名为“汇总”。在A1、B1、C1、D1、E1单元格中分别输入“索引”、“姓名”、“语文”、“数学”、“总分”。在A2单元格中输入数字1,然后向下拖曳到单元格A25,得到从1到24的序列数。在B2单元格中输入公式“=VLOOKUP(A2,索引!$A$2:$B$24,2,0)”,参照前文对VLOOKUP函数的介绍,我们可以知道此公式的功能在于根据A列相应单元格的数值,在“索引”工作表指定区域中找到对应的数值,返回给当前的单元格。Lookup_value参数和Table_array 参数分别运用了相对引用和绝对引用,都是为了复制公式的需要。在此,我们还利用了VLOOKUP函数的另一个特性,即如果Table_array 中有多个值与Lookup_value对应,则函数仅响应第一个出现的值。现在明白为什么“索引”工作表中有多个重复值也没关系了吧!
    然后在C2和D2中分别输入公式“=IF(ISNA(VLOOKUP(B2,语文!$A$2:$B$13,2,0)),0,VLOOKUP(B2,语文!$A$2:$B$13,2,0))”、“=IF(ISNA(VLOOKUP(B2,数学!$A$2:$B$13,2,0)),0,VLOOKUP(B2,数学!$A$2:$B$13,2,0))”,用于根据B列中的学生姓名从“语文”和“数学”工作表中取得他们相应的成绩。ISNA()是用来判断VLOOKUP()的值是否有效的函数,即如果VLOOKUP()找不到相应的成绩时,ISNA()返回TRUE。再结合IF(),此公式的完整含义为如果相应的学生有对应的成绩,则返回他的成绩,否则为0。因为有许多学生只有单科成绩,所以这样的判断还是必要的,否则当VLOOKUP()找不到对应的成绩时,会返回值“#N/A”,不但难看,而且影响后面总分的计算。
    在E1单元格中输入公式“=C2+D2”就能得到总分,这个公式应该没什么好说的吧!
最后,同时选中C1、D1、E1单元格并往下进行拖曳以复制公式。怎么样,全都算好了吧!学生一个不多也一个不少,刚刚好,而且他们的成绩也一分不差,是不是很容易!见图二所示。

        access数据库
    好了,现在再回过头去理解一下方案中所有的公式,应该都是非常简单

发布人:Kevin Zhou-Excel Home  
分享到:
点击次数:  更新时间:2005-02-12 18:14:15  【打印此页】  【关闭】
上一条:深入剖析Excel2000的自动保存  下一条:论Excel文件的安全性—解密篇



相关文章

  • • 在 Excel中 打开Access窗体或者报表的错误原因及解决办法
  • • 为选择的区域添加边框
  • • 如何在Excel中使用文件对话框
  • • 用快捷键实现相对引用和绝对引用快速来回切换
  • • 【技巧】Excel控制特定单元格输入文本的长度
  • • Excel技巧集锦
  • • Excel技巧大汇总
  • • 在word中输出数学符号

热门文章

  • [2005-03-05] 用FreQuency函数统计分数段access数据库
  • [2005-02-20] Excel2000 应用案例之四十四access数据库
  • [2005-02-20] Excel2000 应用案例之四十access数据库
  • [2005-03-06] 给含公式的单元格点颜色看看access数据库
  • [2005-03-07] 巧用Excel2000编制行政区划代码access数据库
  • [2005-02-13] Excel在经济效益审计中的具体运用access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

中山市天鸣科技发展有限公司 版权所有 1999-2023 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2025  www.metinfo.cn