ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 92990|回复: 146

[原创] 对新手谈谈EXCEL用到的数据结构

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-11-20 14:20 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:工作表和工作簿
前言
进入论坛的人,绝大多数在进行“程序设计”(只不过自己没有刻意注意到这点)。什么是“程序”呢?也就是处理某件事情用到的一步一步怎么做的一些经过。什么是“程序设计”呢?答案是“程序设计=计算方法+数据结构”。在EXCEL里面,计算方法就是你处理你的工作簿用的方法,包括公式、函数、代码,还包括数据透视等等其他方法;数据结构就是把你的工作簿的数据设计如何表示,是“随心所欲”地表示,还是用比较好的方式,比如关系数据库、队列、堆栈、树等等表示。纵观论坛,相当多的问题都集中在计算方法上面,而鲜见有关数据结构的问题,而恰恰是因为数据结构的不合理引起计算方法的复杂,所以,在这里专门说说有关的数据结构。
下面为了叙述方便,我们把进行这些工作的人们称为“设计员”。
设计员接到一个Office任务,如果不是“写文章”,首先考虑的应该是:“用什么形式组织数据?”。在office大家庭里面,常用的表格有WORD表格和EXCEL 表格。WORD表格主要在于外观漂亮(例如:合并单元格、拆分单元格、斜线、颜色、边框等等几乎你可以想到的格式),主要用途是“给别人看的”。不少新人习惯使用WORD形式的表格(也许是“情有独钟”),但是它很不适合进行数据的计算处理。如果你的任务仅仅是“一次性的”,完事以后就什么都再也不要了,就可以用它。而EXCEL表格恰恰相反,它特别擅长数据处理,而且如果不是你特别去设置各种格式(这个恰恰是“无用功”),“看起来”外观不漂亮(就像你新建一个工作簿看见的那样),但是它是一个“地基”,地基建好了,在它上面才可以建设给别人看的高楼。如果你的工作以后还可能用到这些数据,那么,就应该用EXCEL表格。有了这些基础数据,就不愁没有“展示”它们的方法(展示的时候你可以设计各种格式),只要引用这些数据,你可以用另外的EXCEL来展示,也可以用WORD来展示,也可以用PPT来展示,还可以用其它东西来展示。
可能用到的数据结构
选用EXCEL 表格来处理数据,首先就要对任务可能涉及的数据进行分析:有哪些数据?它们之间有什么关系?数据的量大概有多少?
如果是对单个对象进行描述(比如描述一个人的健康状况),可以用二维表;
如果单个对象之间有关系(比如描述一个家庭的状况,像户口簿),可以用三维表;
三维表之间有关系(比如描述一个村的家庭的状况,像登记某村低保家庭情况),可以用四维表;依次类推。
其他还有队列、堆栈、树、等等。
一、二维表
平时最常见到就是二维表,也就是由若干行若干列组成的一个矩形区域。见图
图一.jpg


图一 二维表
二维表是“关系数据库”的外在形式。
这里的数据通常情况下是“关系数据”,这些“关系数据”的集合称为关系数据库。 何谓“关系”,就是数据之间都有某种联系(它们都是为了描述一件事的某个特征)。这样,关系数据库的含义就是由“表格”组成的数据库。这个表格不需要进行任何格式设计(特别是合并单元格之类,有N行M列就有N×M个单元格)。
表格的列一般称为字段(也可以称为“项目”),每一列(字段)都具有相同的类型,其中第一列称为“字段名”(见图一的浅蓝色的行) 。
表格的行一般称为记录。一行称为一条记录。一条记录应包括描述它的所有数据。
大家记住一点:它的每一列要保证相同的类型,举个例子说,图一的“单位名称”字段不能出现“2013”数值数据,只能是文本字符;而“序号”字段也不能出现“学校”字样。
如果一个矩形表格的周围都是空白的行列所包围,这个表格也叫“表单”。
形成的二维表的标准形式就应该是“表单”。通常只由设计员输入后形成,一旦形成,就“只读”(提供数据供其他地方使用),只有设计员(或者通过授权的其他人员)才可以对它进行修改等操作。
(未完)

评分

15

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-20 14:43 | 显示全部楼层
本帖最后由 lhdcxz 于 2013-11-28 11:11 编辑

(一)、建立二维表
1、数据分析
我们拿到一项任务,如果需要二维表,首先要进行“数据分析”。
也就是看看大概需要哪些信息才可以描述事物本身(同时也就知道了需要多少字段),(可以多设计几个字段。比如,留一个专门表示“是否删除”的字段,以后如果需要删除这个记录,在这个字段留个记号就可以了,而不需要“真正”删除这个记录。这是数据库管理的范围,在这里不讨论)。
形成数据库.JPG
图二  需要的数据库二维表
2、设计输入界面
虽然二维表最直观、是使用最方便的表格,但是它的外观不怎么样,你不能、也不能要求其他输入人员直接在这个二维表里面输入修改数据,那非得把他逼疯不可,如果给领导看一个这样的表,他很可能看不懂还说你“无能”。这样,就有一个把若干数据从“好看的外观”→变成“二维表”→再变成“好看的外观”的过程。你可能说,这不是“多此一举”吗?非也!大量的数据处理是在“内部”进行的,是“你”的工作,别人看不看得见、看不看得懂都是无关紧要的。关键在于方便你处理。
可以设计一个供他人使用的输入表,这个表的界面一定要“友好”(好看、方便)比如下图
输入界面.JPG
图三  输入界面

3、初步设计代码
Private Sub CommandButton1_Click() '记录数据按钮
i = Sheet2.[A65336].End(xlUp).Row + 1 '查找已有数据库的最后一个空行
Sheet2.Cells(i, 1).Value = Sheet1.Range("b2") '传递数据
Sheet2.Cells(i, 2).Value = Sheet1.Range("f2") '传递数据
Sheet2.Cells(i, 3).Value = Sheet1.Range("b3") '传递数据
Sheet2.Cells(i, 4).Value = Sheet1.Range("f3") '传递数据
Sheet2.Cells(i, 5).Value = Sheet1.Range("b4") '传递数据
Sheet2.Cells(i, 6).Value = Sheet1.Range("d4") '传递数据
Sheet2.Cells(i, 7).Value = Sheet1.Range("f4") '传递数据
Sheet2.Cells(i, 8).Value = Sheet1.Range("b5") '传递数据
End Sub
形成输入数据库 - 初步.rar (10.13 KB, 下载次数: 1116)
很显然,这个代码是很容易写的,只要目标单元格地址和引用单元格地址不写错就行。
请注意:我的附件都是在2003版本下单机调试通过的,没有在其他高版本上调试过,高版本除开宏表函数之外,一般应该没有问题。附件最好不要直接打开运行,否则也许会因为在当前文件夹里面找不到文件而出现错误。应该解压到某个文件夹里面(如果没有“文件夹选择对话框”,那么其他需要在操作的时候要访问的文件也放到这个文件夹里面)解压后再运行。附件含VBA代码。如果你没有操作过含VBA代码(也称为“宏”)的Excel文件,就先要在窗口工具栏的“工具”--“宏”--“安全性”选择“中(或者低)”。如果你的“宏、安全性选择的是“中”,打开运行的时候要“启用宏”。
4、完善代码(尽量使它适应各种类似的地方)
现在,你自己对目前的任务用这个代码已经可以完成了(是不是很简单?)。但是如果再接到其他类似任务,就又得改代码,很不方便。
看来,有几个地方要改:
(1)、如果字段个数和现在的不一样,要能够自动判断字段有多少;
(2)、如果输入表格不一样,要能够方便告诉输入的数据的单元格地址;
为此,我们增加两列,用来输入字段名字和指定对应的字段值所在单元格位置。
指定字段位置.JPG
图四 增加参数

Private Sub Workbook_Open() '打开的时候计算项目个数
  c = Application.CountA(Sheet1.Range("aa2:aa65536")) '项目个数
  Sheet2.Select
End Sub

Private Sub CommandButton1_Click() '记录数据按钮
i = Sheet2.[A65336].End(xlUp).Row + 1 '查找最后一个空行
For k = 1 To c’按照项目个数循环
  Sheet2.Cells(i, k).Value = Sheet1.Range(Range("ab" & k + 1).Value).Value
'按照AB列的单元格里面的地址值传递数据
Next
End Sub

自定义版式形成输入数据库 - 第二步.rar (11.42 KB, 下载次数: 899)
通过这些改进,已经基本适应各种输入版式了。但是还要人工来手动输入一些“参数”,不方便。
5、使操作更加方便
现在,还可以进一步改进:不要“人工通过输入绝对地址”的方式来指定输入的数据的单元格地址而用鼠标来指定(傻瓜式操作)。
代码比较长,请直接下载附件,用Alt+F11查看代码。
自定义版式形成输入数据库.rar (15.25 KB, 下载次数: 1206)
备注:
1、我的附件都是在2003版本下单机调试通过的,没有在其他高版本上调试过(除开宏表函数之外,一般应该没有问题)。
   如果你是高版本的系统,你应该先把我的文件另存为高版本的文件再运行。
2、我的回复附件最好不要直接打开运行,否则也许会因为在当前文件夹里面找不到你的文件而出现错误(这也是一些人使用我的附件失败的原因)。
   应该解压到某个文件夹里面(其他在操作的时候要访问的文件也放到这个文件夹里面)解压后再运行。
  (建议新人把附件先“另存为”在桌面,即C:\Users\Administrator\Desktop,解压后再运行)
3、回复附件大多数含VBA代码。如果你没有操作过含VBA代码(也称为“宏”)的Excel文件,
   就先要在窗口工具栏的“工具”--“宏”--“安全性”选择“中(或者低)”。
   如果你的“宏、安全性选择的是“中”,打开运行的时候要“启用宏”。
新人特别注意第2条的要求。
(未完待续)

点评

支持一下,楼主继续  发表于 2013-11-20 14:48

评分

7

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-21 15:30 | 显示全部楼层
本帖最后由 lhdcxz 于 2013-11-21 15:59 编辑

(二)由其他表格形成二维表
1、由word文件形成二维表
有些单位习惯用Word表格来收集信息。通常,这些表格有3种形式,即:横式(字段名与字段值在同一行,字段名在左边,字段值在字段名的右边)、竖式(字段名与字段值在同一列,字段名在上边,字段值在字段名的下边)、混合式(横式与竖式的混合)。你可以通过设置WORD文档表格框线等方法来稍微美化一下WORD文档表格(给别人看的嘛)。
①、横式
横式.JPG
图五 横式
你只需要把收集来的这些同样格式的表格都集中放在同一个文件夹里面,把我的附件也放在这个文件夹里面,运行我的文件,就可以自动形成EXCEL表单(下面相同)。
(见附件:读WORD文档表格(横式)形成EXCEL表单) 读WORD文档表格(横式)形成EXCEL表单.rar (17.7 KB, 下载次数: 746)
②、竖式
竖式.JPG
图六 竖式
(见附件:读WORD文档表格(竖式)形成EXCEL表单) 读WORD文档表格(竖式)形成EXCEL表单.rar (14.15 KB, 下载次数: 562)
③、混合式
混合式.JPG
图七  混合式
下图看起来好像标题和编号都在WORD表格“外面”,其实还是在里面,只是没有线条颜色了,你只要看见那个表格图标就明白表格的范围。
混合式美化.JPG
图八 美化了的表格
下面的数据决定了把混合式的WORD文档表格形成数据库的数据引用位置。
设置位置.JPG
图九 数据引用位置
行列指定方法.jpg
图十 对应关系
(见附件:读WORD文档表格(混合式)形成EXCEL表单) 读WORD文档表格(混合式)形成EXCEL表单.rar (29.19 KB, 下载次数: 740)

(未完待续)

点评

暂不跟帖,关注一下。  发表于 2013-11-21 16:40

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-26 16:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lhdcxz 于 2013-11-28 11:15 编辑

④、WORD文档里面有多个表格
有的WORD文档里面有多个表格,如果多个这些文档里面的表格的格式(包括个数、顺序)都相同,也可以根据表格的个数把里面的数据分别形成数据库。
两个表格.jpg
图十一 多个表格的WORD文档
(见附件:读多个WORD文档多个表格分别形成EXCEL表单)
读WORD文档多个表格分别形成EXCEL表单.rar (42.88 KB, 下载次数: 695)
2、由Excel文件形成二维表
如果是用Excel表格来收集信息。也分几种情况。
①、Excel表格看起来像WORD表格;
EXCEL表格形式.JPG
对于这样的情况,可以用“本文件夹里面其他工作簿表格形式的第一个工作表选择的内容形成数据表单”。因为只是说明方法,所以没有在代码上面下很多功夫。
(见附件:合并表格形式的工作簿取得数据)
合并表格形式的工作簿取得数据.rar (26.75 KB, 下载次数: 593)
②、Excel表格看起来像二维表。
有的Excel表格看起来像二维表,但是它还有一些“多余的东西”,比如下图
像二维表.JPG
图十三 像二维表的Excel表格
表中第1 行到第4行不在合并之列,最后的“合计”行也不要,记录数不定,现在要把它们合并成为真正的二维表。就要把多余的东西不要,只合并需要的。如果单独写代码,就事论事当然可以,现在想适用范围广一点,用户只要指定合并的范围就可以。
用户指定合并的范围.jpg
图十四  用户指定合并的范围

可以参考下面的附件。
(见附件:遍历格式相同多个工作簿合并其中第1个工作表选择的内容)
遍历格式相同多个工作簿合并其中第1个工作表选择的内容.rar (225.56 KB, 下载次数: 717)

(未完)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-29 09:17 | 显示全部楼层
本帖最后由 lhdcxz 于 2013-11-29 09:21 编辑

图十四有误,但是无法编辑取消,重新发图。
用户指定合并范围.JPG

下面继续

③、Excel表格是二维表。
本来是二维表.JPG
图十五  二维表Excel表格

这个用简单的方法就可以。
(见附件:遍历格式相同多个工作簿合并其中第1个工作表的内容)
遍历格式相同多个工作簿合并其中第1个工作表的内容.rar (15.68 KB, 下载次数: 632)
总结:二维表是最基本的结构。它是一个独立的平面结构的数据表单,有若干个字段和字段值,同一行的字段值组成一个记录。每个字段名都可以作为关键字,但是必须有一个关键字,它的值是没有重复值的,这样的字段名叫主关键字。用主关键字可以定位唯一的一条记录。因为其他字段的值也许有空值,用来计算记录个数也许不正确,都是是用主关键字来计算记录个数的。强烈建议把主关键字放在最左边的列。
(三)、二维表的展示
给别人看这种二维表是不现实的。上面说过,这样的二维表是不好看的,要把它给别人看,就要“改头换面”。一般来说,可把二维表搞成“看起来像WORD表格” ,给人直观的感觉。
信息核对.JPG
图十六  信息核对
捕获.JPG
图十七 与这个信息核对表对应的数据库
下面分三种情况介绍。
(未完)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-2 14:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1、填写表格
如果你已经设计好展示用的格式表,那么就可以在里面填写数据。
①、全部数据填写后形成工作表

展示为工作表.JPG

图十八  展示用Excel表格
这个工作与前面说的“把表格形式的变成数据库”相反,所以我们可以参考前面的代码反过来做。
(见附件:自动填写表格形成工作表)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-2 14:48 | 显示全部楼层
自动填写表格形成工作表.rar (18.32 KB, 下载次数: 767)
注意:因为代码是把第1列作为“主关键字”(即关键字没有重复的值),所以在使用的时候可能要调整你的数据库的列的位置。
这样做的结果是把每条记录形成一个格式相同的工作表,在2003版本的情况下,只能有250多个。
②、全部数据填写后形成文件展示
当然,也可以形成WORD文件或者Excel工作簿文件,个数就没有限制了。
(见附件:自动填写表格形成WORD文档)
自动填写表格形成WORD文档.rar (17.14 KB, 下载次数: 686)
(见附件:自动填写表格形成工作簿)
自动填写表格形成工作簿.rar (15.06 KB, 下载次数: 546)

③、部分记录或者全部记录展示
有的时候需要选择是部分还是全部展示,就要允许观看者自行选择。一般来说,可以用 “选择对话框”

选择对话框.JPG

图十九  选择对话框
(见附件:自动形成连续单个证件或表格:自定义版式、自选项目、可有相片、可并排)

自动形成连续单个证件或表格:自定义版式、自选项目、可有相片、可并排.zip (367.41 KB, 下载次数: 800)

(未完)


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-12-3 11:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-12-4 11:04 | 显示全部楼层
很实用,学习了,谢谢楼主

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-6 09:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
④、带有公式的二维表
有的时候,需要把若干条记录展示在一起,在最后面还要加上合计小计之类的公式行。
注意,这些看起来不是标准的二维表,而是在形成二维表以后,自己又加上表头或者根据代码的需要增加了行的。
(见附件:按行数拆分工作表(含表头和公式))
按行数拆分工作表(含表头和公式).rar (11.9 KB, 下载次数: 577)
(见附件:按户形成文档)
按户形成文档.rar (20.79 KB, 下载次数: 426)
⑤、选择查看某条记录
查询.JPG
图二十  查询Excel数据库表格
主要就是根据查询的关键字在二维表里面找到记录,再把它展示在设计好的表格里面去。
(见附件:查询二维表)
查询二维表.rar (17.37 KB, 下载次数: 518)
(未完)

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-23 14:32 , Processed in 0.050238 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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