设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2074|回复: 0
打印 上一主题 下一主题

[VBA编程/宏] Excel在调查统计中的应用

[复制链接]
跳转到指定楼层
1#
发表于 2004-7-29 23:48:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Excel在调查统计中的应用

     

一、 前 言

  目前,市场调查、思想状况调查、民意测验等各种调查统计十分流行,怎样将大量的调查表,归纳成有价值的统计表呢?对于某些大公司或企业,常采纳大型数据库 + 程序来完成,对于小公司这样的开销太大了,也不值得。美国微软公司开发的Excel电子表格软件,其强大的统计功能和编程能力,完全可满足各类调查统计表的生成,其简单易用性更能为广大办公自动化人员所接受,从而进一步减少对高级程序员依赖性。本文结合《马钢职工在当前改革中思想状况调查统计表》的实例,介绍使用Excel 97在调查统计表的应用。为了节省篇幅从1000份调查表中只选区30份数据,同时基本条件及调查内容也只选取了一小部分,但这并不影响说明问题。

  二、 数据库的建立

  目前调查表多采用选择答案方式让被调查人员填写,这样做有两个好处,一是节省被调查人员的时间;二是限制了答题范围,避免了答非所问的情况,同时也便于统计。在《马钢职工在当前改革中思想状况调查统计表》中就采用了类似于多项选择题和单项选择题混合方式,从附表2统计表中可看出。Excel中可将数据清单用作数据库即数据清单中的列是数据库中的字段,数据清单中的每一行对应数据库中的一个记录。因此只要将题目号作为列标志。用1 ~ 9数字作为选中的答题号,填写在题目号下即可。对于多种答案可采用"*"分隔,参见附表1所示,采用这种方式对操作员来说非常简单,只要选择小键盘即可操作,在录用数据时,使用Excel的[冻结拆分窗口]命令是必要的,可大大减少行列错位错误。

  Excel数据清单合并相当简单,在两个数据清单间执行"复制"与"粘贴"操作即可。故可以几个操作员同时进行录用数据工作,最后合并到一张数据清单即可。

  三、 统计表的制作

  统计表一般需要作两件事,一是根据筛选条件,进行数据筛选;二是将筛选出来的数据进行统计处理,如:求和、求最大值、求平均值等,应用最广泛的是求和统计,以便查看某项所占的比例,便于决策人员作出决策。在本例中需要分别统计各层次职工对改革的看法,在统计表中为了能表达筛选条件,故采用高级筛选比较适用,这样筛选条件与统计结果可在一张表中表达出来,便于人员查看分析,如附表2所示。数据的统计是本例中的关键,Excel中提供大量的工作表函数,其中CountIF(Range,Criteria)工作表函数就是计算某个区域中满足给定条件单元格的数目,使用它可以完成本例中单项选择答题的统计,如:在统计表中第一题目第①答题单元格(即D8 单元格中)输入=CountIF(数据库!F3:F32,1)/SUBTOTAL(3,数据库!F3:F32),由于Criteria准则项只允许以数字表达式或以字符串形式来精确地表达条件,如"=1"或"> 1"或"1"等,不能表达模糊的条件,即字符串有"1"存在的概念。这样就不能将"1*2*3"多项选择表示方式统计出来,因此,CountIF工作函数在本例中不能完全应用,为了使统计工作简单这就需要我们自定义工作函数uCountIF(区域,模糊条件)如下:

  \'模糊条件求和

  \'用于多项选择数据统计求和

  \'---------------------------------------

  Function uCountIF(区域, 模糊条件)

  For Each r In 区域.Rows

  If r.Hidden = False Then

  For 计数 = 1 To Len(r.Value)

  If Mid$(r.Value, 计数, 1) = 模糊条件 Then

  求和 = 求和 + 1

  Exit For

  End If

  Next

  End If

  Next

  uCountIF = 求和

  End Function

  注:此处只给出了最常用的模糊条件"="即单元格中存在某值条件,其它模糊条件如"〈〉"不存在、"〉="存在大于且等于某值等,如需要可与笔者联系。

  由上述自定义函数可见,Excel宏编写相当简单,而且除关键词或保留词之外,均可使用汉字。统计工作函数定义完毕,就可使用,使用时应注意题目号、答题号与公式之间的关系,如在"统计表"中的第6题①号答题单元格,即D18单元格输入=uCountIF(数据库!F3:K32,1)/ SUBTOTAL(3,数据库!F3:F32),即F18单元格输入=uCountIF(数据库!K3:K32,2)/ SUBTOTAL(3,数据库!F3:F32)。以此类推,分别填入相应的单元格中即可。采用指定名称可大大简化公式输入,具体作法是:选择"数据库"表单中的题目1到题目10数据区,即(F2:O32)→[插入]→[名称]→[指定]→选择名称在首行→确定。

  SUBTOTAL(3,数据区)工作表函数是求筛选区总数,由于筛选记录总数对所有列来说是相同的,故我们只需求"题目1"的筛选记录总数即可。在数据清单下空一行的单元格中即F34单元格中输入= SUBTOTAL(3,题目1),并定义此单元格名称为"筛选总数",其操作为:选F34单元格→[插入]→[名称]→[定义]输入→"筛选总数"→"确定"。则上述第6题①号答题D18单元格公式输入= uCountIF(题目6,1)/筛选总数,F18单元格公式为= uCountIF(题目6,2)/筛选总数。

  四、 保
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-20 19:44 , Processed in 0.095149 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表