Excel表中如何让相同名称、规格、型号、单价聚集一起

标签:
excel分类汇总工作表单元格筛选杂谈 |
一、选中整个表格,单击菜单”数据”→”排序”→些对话框中,主要键中选择”名称”→次要键中选择”规格”→第三键中选择”型号”→单击确定按钮试试吧,可以的. 二、[编辑本段] Excel数据分类汇总Excel数据分类汇总满足多种数据整理需求 我们日常工作中经常接触到Excel二维数据表格,我们经常需要通过需要根据表中某列数据字段(如“工程类型”)对数据进行分类汇总。 下面我们针对三种不同的分类汇总需求,为大家介绍不同的解决方案。这三种需求分别是:既想分类汇总又想分类打印、不想分类打印只是想随时查看各类数据的明细和统计情况、不想打乱正常的流水式数据表格的数据顺序而是想随时查看各类数据的统计结果(此处假定将统计结果保存在另外一个工作表中)。 需求一、既想分类汇总,又想分类打印 解决方案:直接利用Excel内置的“分类汇总”功能来实现。 1、选中工程类型列的任意一个单元格,按一下“常用”工具栏上的“升序排序”或“降序排序”按钮,对数据进行一下排序。 注意:使用“分类汇总”功能时,一定要按分类对象进行排序! 2、执行“数据→分类汇总”命令,打开“分类汇总”对话框。 图2 3、将“分类字段”设置为“工程类型”;“汇总方式”设置为“求和”;“选定汇总项”为“面积”和“造价”;再选中“每组数据分页”选项。最后,确定返回。 4、分类汇总完成。 需求二、不想分类打印,只是想随时查看各类数据的明细和统计情况 解决方案:利用Excel自身的“自动筛选”功能来实现。 1、任意选中数据表格中的某个单元格,执行“数据→筛选→自动筛选”命令,进入“自动筛选”状态。 2、分别选中F203、G203单元格(此处假定表格中共有200条数据),输入公式:=SUBTOTAL(9,F3:F202)和=SUBTOTAL(9,G3:G202)。 小提示:此函数有一个特殊的功能,就是后面进行自动筛选后,被隐藏行的数据不会被统计到其中,达到分类统计的目的。 3、以后需要随时查看某类(如“经济住宅”)数据的明细和统计情况时,点击“工程类型”右侧的下拉按钮,在随后弹出的快捷菜单中即可。 需求三、如果我们不想打乱正常的流水式数据表格的数据顺序,而是想随时查看各类数据的统计结果(此处假定将统计结果保存在另外一个工作表中) 解决方案:利用Excel的函数来实现。 1、切换到Sheet2工作表中,仿照图5的样式,制作好一个统计表格。 2、分别选中B3、C3、D3单元格,输入公式:=COUNTIF(Sheet1!$E:$E2,A3)、=SUMIF(Sheet1!$E:$E2,A3,Sheet1!$F:$F2)、=SUMIF(Sheet1!$E:$E2,A3,Sheet1!$G:$G2)。 3、同时选中B3、C3、D3单元格,将鼠标移至D3单元格右下角成细十字线状时,按住左键向下拖拉至D10单元格,将上述公式复制至B4至D10单元格区域中。 4、选中B11单元格,输入公式:=SUM(B3:B10),并仿照上面的操作,将此公式复制到C11和D11单元格中。 确认以后,各项统计数据即刻呈现在我们的面前。 如果要显示外部行或列字段的分类汇总,请单击“分类汇总”下的“自动”选项。 如果要显示内部行或列字段的分类汇总,请单击“分类汇总”下的“自定义”选项,然后单击右面框中的某个汇总函数。而对基于 OLAP 数据库中源数据的数据透视表报表而言,“自定义”选项无效。 如果要删除分类汇总,可单击“分类汇总”下的“无”选项。 如果要使用其他汇总函数,或是要显示多种类型的分类汇总,可单击“自定义”右面框中所需的汇总函数。请参阅可用汇总函数的说明。 在基于 OLAP 数据库中源数据的数据透视表报表中,不能更改分类汇总的汇总函数。 [编辑本段]用匿名类处理分类汇总的方法分类汇总是统计中常用,举例来说如统计学生成绩,及格不及格的归类,分优良中差等级归类等,每个单项代码很好写,但是如果分类汇总的项目多了,能一种汇总写一个函数吗?比如说有些科目60分才算及格,有些科目50分就算;有些老师喜欢分优良中差四等,有些老师却喜欢分ABCD;不一而足,如果每个都写一个函数无疑是个编写和维护恶梦.如果我们用匿名类把分类汇总的规则和分类汇总的过程分别抽象出来,代码就清晰灵活多了,以下代码讲述了这个过程,代码比较简单,这里就不赘述了,相信大家都能看明白. 首先是数据的基本类Student: publicclassStudent{ privateStringname; privateintscore; publicStudent(Stringname,intscore){ this.name=name; this.score=score; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetScore(){ returnscore; } publicvoidsetScore(intscore){ this.score=score; } } 然后是用于分类汇总的类,它强制子类实现getKey和getvalue两个方法: publicabstractclassClass publicStudentstudent; publicClassifyRule(){ } publicvoidsetStudent(Studentstudent){ this.student=student; } abstractpublicStringgetK abstractpublicintgetValu } 接下来是对Student进行CRUD处理的StudentService类,注意getSum方法,它保留了筛选过程,筛选规则则不在其中: imp imp imp publicclassStudentServic privateList<Student>students; publicStudentService(){ students=newArrayList<Student>(); } publicvoidadd(Studentstudent){ students.add(student); } publicHashtable<String,Integer>getSum(ClassifyRulerule){ Hashtable<String,Integer>ht=newHashtable<String,Integer>(); for(Studentstudent:students){ rule.setStudent(student); Stringkey=rule.getKey(); intvalue=rule.getValue(); if(ht.containsKey(key)){ IntegeroldValue=ht.remove(key); oldValue+=value; ht.put(key,oldValue); }else{ ht.put(key,value); } } returnht; } } 最后是测试代码,注意其中筛选规则的创建: imp imp publicclassTest{ publicstaticvoidmain(String[]args){ //初始化 StudentServiceservice=newStudentService(); service.add(newStudent("Andy",90)); service.add(newStudent("Bill",95)); service.add(newStudent("Cindy",70)); service.add(newStudent("Dural",85)); service.add(newStudent("Edin",60)); service.add(newStudent("Felix",55)); service.add(newStudent("Green",15)); //60分及格筛选 ClassifyRulerule60=newClassifyRule(){ publicStringgetKey(){ returnstudent.getScore()>=60?"及格":"不及格"; } publicintgetValue(){ return1; } }; System.out.println("60分及格筛选"); printHt(service.getSum(rule60)); //50分及格筛选 ClassifyRulerule50=newClassifyRule(){ publicStringgetKey(){ returnstudent.getScore()>=50?"及格":"不及格"; } publicintgetValue(){ return1; } }; System.out.println("\n50分及格筛选"); printHt(service.getSum(rule50)); //分"优良中差"等级 ClassifyRuleruleCn=newClassifyRule(){ publicStringgetKey(){ Stringretval=""; intscore=student.getScore(); if(score>=90){ retval="优"; }elseif(score>=80){ retval="良"; }elseif(score>=60){ retval="中"; }elseif(score>0){ retval="差"; } returnretval; } publicintgetValue(){ return1; } }; System.out.println("\n分优良中差等级筛选"); printHt(service.getSum(ruleCn)); //分"ABCD"等级 ClassifyRuleruleWest=newClassifyRule(){ publicStringgetKey(){ Stringretval=""; intscore=student.getScore(); if(score>=90){ retval="A"; }elseif(score>=80){ retval="B"; }elseif(score>=60){ retval="C"; }elseif(score>0){ retval="D"; } returnretval; } publicintgetValue(){ return1; } }; System.out.println("\n分ABCD等级筛选"); printHt(service.getSum(ruleWest)); } privatestaticvoidprintHt for(Iteratorit=ht.keySet().iterator();it.hasNext();){ Stringkey=(String)it.next(); Integervalue=(Integer)ht.get(key); System.out.println("Key="+key+"Value="+value); } } } 测试结果如下: 60分及格筛选 Key=及格Value=5 Key=不及格Value=2 50分及格筛选 Key=及格Value=6 Key=不及格Value=1 分优良中差等级筛选 Key=优Value=2 Key=良Value=1 Key=中Value=2 Key=差Value=2 分ABCD等级筛选 Key=AValue=2 Key=DValue=2 Key=CValue=2 Key=BValue=1 [编辑本段]对重复数据中的值进行分类汇总假设您要建立一个其中每个帐户代码均可出现多次的月度事务列表。在月末,您需要按帐户代码对数据进行组织和分类汇总。 执行此任务的方法至少有5种。以下是这5种方法的教程。 注释示例数据集中的帐户号码在列A中,金额在列B中。数据区域是A2:B100,数据目前未排序。 方法1:使用创造性的IF语句和“选择性粘贴” 步骤如下: 按帐户(列A)对数据进行排序。 在列C中创建一个公式,以持续对每个帐户进行动态汇总。例如,在单元格C2中创建公式: =IF(A2=A1,C1+B2,B2) 在列D中创建一个公式,以标识特定帐户的最后一个条目,例如,在单元格D2中创建公式: =IF(A2=A3,FALSE,TRUE) 将C2:D2中的公式向下复制到所有行中。 复制C2:D100。在此区域仍处于选中状态时,单击“编辑”菜单上的“选择性粘贴”,单击“数值”,然后单击“确定”,将C2:D100中的公式改为数值。 按列D排序,降序排列。 对于在列D中值为TRUE的行,列A中是帐户号码的唯一列表,列C中是帐户的最终动态汇总。 优点速度快。只需对写IF语句感觉敏锐。 缺点还有更好的方法。 方法2:使用“高级筛选”获得唯一帐户列表 这是一种获得唯一帐户号码列表的方法: 突出显示区域A1:A100。 在“数据”菜单上,指向“筛选”,然后单击“高级筛选”。 单击“将筛选结果复制到其他位置”。 选中“选择不重复的记录”复选框。 选择要在其中显示唯一列表的工作表空白部分。将此位置键入“复制到”框中。 注释单击“将筛选结果复制到其他位置”之前,“复制到”框显示为灰色。 单击“确定”。唯一帐户号码将显示在输入的位置。 输入获得结果所需的所有进一步操作、数组公式等。 优点比方法1快。无需排序。 缺点此后所需输入的数组公式将使您头晕。 方法3:使用“合并计算”命令 此方法使用“合并计算”命令,这有几项要求:帐户号码必须在要汇总的数值字段的左侧。每列上方必须有标题。需要对其中包括左列中的帐户号码和顶部标题的单元格矩形块指定区域名称。在本例中,该区域为A1:B100。 突出显示区域A1:B100。 通过在名称框(在编辑栏左侧)中单击并键入TotalMe之类的名称,对此区域指定区域名称。(也可以在“插入”菜单上单击“名称”。) 将单元格指针置于工作表的空白部分。 在“数据”菜单上,单击“合并计算”。 在“引用位置”框中,键入区域名称(TotalMe)。 在“标志位置”部分,选中“首行”和“最左列”。 单击“确定”。 优点无需排序。可用一系列键盘快捷键将其实现:Alt+D+N(区域名称)、ALT+T、ALT+L、Enter。易于缩放。如果区域包括12个月份列,则结果将是每月的汇总。 缺点如果在同一工作表上再次使用“合并计算”功能,则需要通过使用Delete键从“所有引用位置”中清除旧区域名称。帐户号码必须位于数值数据的左侧。这要比数据透视表稍慢,对于具有超过10,000个记录的数据集,这会变得很明显。 方法4:使用“分类汇总”命令 这是一种很棒的功能。但因为得出的数据处理起来很陌生,所以与“合并计算”相比,您可能不常使用此功能。 按列A排序,降序排列。 选择数据区域内的任一单元格。 在“数据”菜单上,单击“分类汇总”。 默认情况下,Excel支持对最后一列数据的分类汇总。这在此例中有效,但您往往必须在“选定汇总项”列表中滚动才能选择正确的字段。 单击“确定”。Excel将在每当更改帐户号码时插入一个新行,并进行分类汇总。 添加汇总后,您将看到小按钮“1”、“2”和“3”显示在名称框下,单击“2”只查看每个帐户其中有汇总的一行。单击“3”查看所有行。 优点很棒的功能。极适于打印有汇总和每节后都有汇总的报告。 缺点必须先对数据进行排序。对于大量数据,这可能会很慢。必须使用“定位”命令(“编辑”菜单),然后单击“定位条件”才能只选择可见的单元格,将汇总移动到其他位置。必须使用“分类汇总”命令(“数据”菜单),然后单击“全部删除”才能恢复原始数据。 方法5:使用“数据透视表” “数据透视表”是所有解决方案中最全面的。不必对数据进行排序。数值列可位于帐户号码的左侧或右侧。可轻易使帐户号码向下或跨页排列。 选择数据区域内的任一单元格。 在“数据”菜单上,单击“数据透视表和数据透视图”。 单击“下一步”接受步骤1中的默认设置。 确保步骤2中的数据区域是正确的(通常是正确的),然后单击“下一步”。 单击步骤3中的“布局”按钮。(Excel97用户会自动转到“布局”作为步骤3。) 在“布局”对话框中,将“帐户”按钮从右侧拖放到“行”区域。 将“金额”按钮从右侧拖放到“数据”区域。 单击“确定”。(Excel97用户单击“下一步”。) 指定是要将结果放在新工作表中还是放在现有工作表的特定部分内,然后单击“完成”。 优点快速、灵活、强大。即使对于大量数据也很快。 缺点有些令人望而却步。
三、通过使用“数据”选项卡,可以将外部数据导入Excel文档中,并且可以进行数据自动筛选,还可以进行数据验证或进行假设分析,或者分级显示数据。
高级筛选 如果数据过于复杂,以上的筛选方法无法满足用户的要求,还可以选择“高级筛选”功能。选择“数据”选项卡,点击中间的“高级”按钮,系统弹出“高级筛选”对话框。用户在其中输入“列表区域”、“条件区域”和“复制到”,系统将会按照要求筛选数据,
分类汇总 如果大量数据中有统一类别的项目,用户可以使用Excel 2007中的“分类汇总”功能将数据分类,以便将杂乱无序的数据变得有规律。选择“数据”选项卡,点击右侧的“分类汇总”按钮,系统弹出“分类汇总”对话框,用户可以根据自己的需求,设定相关选项,之后点击“确定”按钮,对数据进行分类汇总。在分类汇总的结果中点击左侧框架中的减号,可以将数据隐藏。需要提示的是,用户在使用数据汇总功能前,需要保证数据格式应该是清单格式,而且数据清单中不能有空列或空行。
四、插入分类汇总 通过使用Excel“数据”选项卡的“分级显示”组中的“分类汇总”命令,可以自动计算列的列表 (列表:包含相关数据的一系列行,或使用“创建列表”命令作为数据表指定给函数的一系列行。)中的分类汇总和总计。 http://soft.yesky.com/imagelist/2007/096/23qa98r63biv.jpg ·分类汇总 分类汇总是通过 SUBTOTAL 函数利用汇总函数 (汇总函数:是一种计算类型,用于在数据透视表或合并计算表中合并源数据,或在列表或数据库中插入自动分类汇总。汇总函数的例子包括 Sum、Count 和 Average。)(例如,“求和”或“平均值”)计算得到的。可以为每列显示多个汇总函数类型。 ·总计 总计是从明细数据 (明细数据:在自动分类汇总和工作表分级显示中,由汇总数据汇总的分类汇总行或列。明细数据通常与汇总数据相邻,并位于其上方或左侧。)派生的,而不是从分类汇总中的值派生的。例如,如果使用“平均值”汇总函数,则总计行将显示列表中所有明细行的平均值,而不是分类汇总行中的值的平均值。 如果将工作簿设置为自动计算公式,则在您编辑明细数据时,“分类汇总”命令将自动重新计算分类汇总和总计值。“分类汇总”命令还会分级显示 (分级显示:工作表数据,其中明细数据行或列进行了分组,以便能够创建汇总报表。分级显示可汇总整个工作表或其中的一部分。)列表,以便您可以显示和隐藏每个分类汇总的明细行。 1、确保每个列在第一行中都有标签,并且每个列中都包含相似的事实数据,而且该区域没有空的行或列。 2、选择该区域中的某个单元格。 3、请执行下列操作之一: 插入一个分类汇总级别 可以为一组数据插入一个分类汇总级别,如下例所示。 http://soft.yesky.com/imagelist/2007/096/5zoi3zwp9mh0.jpg http://soft.yesky.com/imagelist/2007/096/7w96p574t9d9.jpg 运动列中的每个更改... http://soft.yesky.com/imagelist/2007/096/6lh86u44j9g7.jpg ...销售额列的分类汇总。 1、对构成组的列排序。有关排序的详细信息,请参阅对区域或表中的数据排序。 2、在“数据”选项卡上的“分级显示”组中,单击“分类汇总”。 http://soft.yesky.com/imagelist/2007/096/m55nc196esau.jpg 将显示“分类汇总”对话框。 3、在“分类字段”框中,单击要计算分类汇总的列。在上面的示例中,应当选择“运动”。 4、在“汇总方式”框中,单击要用来计算分类汇总的汇总函数。在上面的示例中,应当选择“求和”。 5、在“选定汇总项”框中,对于包含要计算分类汇总的值的每个列,选中其复选框。在上面的示例,应当选择“销售额”。 6、如果想按每个分类汇总自动分页,请选中“每组数据分页”复选框。 7、若要指定汇总行位于明细行的上面,请清除“汇总结果显示在数据下方”复选框。若要指定汇总行位于明细行的下面,请选中“汇总结果显示在数据下方”复选框。在上面的示例中,应当清除该复选框。 8、(可选)通过重复步骤一到步骤七,可以再次使用“分类汇总”命令,以便使用不同汇总函数添加更多分类汇总。若要避免覆盖现有分类汇总,请清除“替换当前分类汇总”复选框。 插入分类汇总的嵌套级别 可以在相应的外部组中为内部嵌套组插入分类汇总,如下例所示。 http://soft.yesky.com/imagelist/2007/096/ih80c2x8gdb2.jpg http://soft.yesky.com/imagelist/2007/096/x45ua2owjy8y.jpg 每次在外部组中更改时,地区列... http://soft.yesky.com/imagelist/2007/096/d2l6u59d13yc.jpg ...对该地区的销售额进行分类汇总,在每次在内部组中更改时,运动列对销售额进行分类汇总。 1、对构成组的列排序。 有关排序的详细信息,请参阅对数据排序。 2、插入外部分类汇总。 如何插入外部分类汇总 A 在“数据”选项卡上的“分级显示”组中,单击“分类汇总”。 http://soft.yesky.com/imagelist/2007/096/m043cupfkrv9.jpg 将显示“分类汇总”对话框。 B 在“分类字段”框中,单击外部分类汇总的列。在上面的示例中,应当单击“地区”。 C 在“汇总方式”框中,单击要用来计算分类汇总的汇总函数。在上面的示例中,应当选择“求和”。 D 在“选定汇总项”框中,对于包含要计算分类汇总的值的每个列,选中其复选框。在上面的示例,应当选择“销售额”。 E 如果想按每个分类汇总自动分页,请选中“每组数据分页”复选框。 F 若要指定汇总行位于明细行的上面,请清除“汇总结果显示在数据下方”复选框。若要指定汇总行位于明细行的下面,请选中“汇总结果显示在数据下方”复选框。在上面的示例中,应当清除该复选框。 G (可选)通过重复步骤一到步骤六,可以再次使用“分类汇总”命令,以便使用不同汇总函数添加更多分类汇总。若要避免覆盖现有分类汇总,请清除“替换当前分类汇总”复选框。 3、插入嵌套分类汇总。 如何插入嵌套分类汇总 A 在“数据”选项卡上的“分级显示”组中,单击“分类汇总”。 http://soft.yesky.com/imagelist/2007/096/gla7tntf15qj.jpg 将显示“分类汇总”对话框。 B 在“分类字段”框中,单击嵌套分类汇总列。在上面的示例中,应当选择“运动”。 C 在“汇总方式”框中,单击要用来计算分类汇总的汇总函数。在上面的示例中,应当选择“求和”。 选择所需的任何其他选项。 D 清除“替换当前分类汇总”复选框。 4、对多个嵌套的分类汇总,重复进行上一步,应从最外层的分类汇总开始进行。 提示 若要只显示分类汇总和总计的汇总,请单击行编号旁边的分级显示符号 http://soft.yesky.com/imagelist/2007/096/bvky5zgkfz19.jpg可以显示或隐藏单个分类汇总的明细行。 删除分类汇总 删除分类汇总时,Microsoft Office Excel 还将删除与分类汇总一起插入列表中的分级显示和任何分页符。 1、单击列表中包含分类汇总的单元格。 2、在“数据”选项卡的“分级显示”组中,单击“分类汇总”。 将显示“分类汇总”对话框。 3、单击“全部删除”。 |