首页百科会计会计知识文章详细

分类汇总

外汇网2021-06-20 20:59:55 65
基本概念

对所有资料分类执行总览。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两个方法:

publicabstractclassClassifyRule{

publicStudentstudent;

publicClassifyRule(){

}

publicvoidsetStudent(Studentstudent){

this.student=student;

}

abstractpublicStringgetKey();

abstractpublicintgetValue();

}

接下去是对Student执行CRUD处理的StudentService类,注意getSum方法,它保留了过滤过程,过滤规则则不在其中:

importjava.util.ArrayList;

importjava.util.Hashtable;

importjava.util.List;

publicclassStudentService{

privateListstudents;

publicStudentService(){

students=newArrayList();

}

publicvoidadd(Studentstudent){

students.add(student);

}

publicHashtablegetSum(ClassifyRulerule){

Hashtableht=newHashtable();

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;

}

}

最后是试探代码,注意其中过滤规则的创建:

importjava.util.Hashtable;

importjava.util.Iterator;

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(Hashtableht){

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用户单击“下一步”。)

指定是要将结果放在新工作表中依旧放在现有工作表的特定部分内,然后单击“完成”。

优点迅速、灵活、强大。即便对于大批报告也迅速。

缺点有些让人望而却步。

标签:

随机快审展示
加入快审,优先展示

加入VIP