Hi,我是秋小叶~
我们在做 Excel 时遇到的问题,多半是表格没有设计好,而公式,则可以弥补表格设计上的错误。
今天的文章就是教你设计好表格,从源头上避免问题发生!
一位网友发来求助邮件,他有一份这样的表格:
从截图中你可以看到,这份表格横向铺开了多个结构相同的小表。每一个小表都是 9 行 14 列,格式完全一样。只是具体的「编号」、「项目名称」等信息不同。
现在他的问题是,怎样才能把每「块」表格中的信息全部都提取出来,汇总到同一个工作表中方便筛选和查看呢?
你当然可以复制粘贴,只是如果再做一份新的表,就又得重做一次!怎么办?
在 Excel 中,只要是有规律的事,都好办!
每一份表格都占用 14 列,那就意味着,每隔 14 列的单元格填写的就是同一类信息。
接下来我们来看一下具体思路和方法。
对症下药
根据这位小伙伴的需求,我们先用公式找到每个所存放的单元格位置。首先使用 COLUMN 函数,把每一列的列号标注出来,分析一下的规律。
在 A1 输入公式=Column()函数,获取当前列的列号,然后向右填充公式
填充公式后就不难看出:
第 1 个到第 4 个的列号依次是,3、17、31……每个数字之间相差 14。
也就是说,如果要在另外一张信息表中填写出计量编号,公式向下填充时,变化的不是列号,而是行号。所以,它的对应关系应该是:
NO1 填写第 3 列的数据
NO2 填写第 17 列的数据
NO3 填写第 31 列的数据
……
也就是说,我们需要用一个公式,把行号换算成列号,而且要以 14 作为倍数。公式如下图中的红字:
公式中动态变化的部分是 0、1、2、3……连续的序号。它可以用 ROW 函数得到。ROW() 可以获取公式当前所在行的行号。
于是,要得到上面的算式,可以用下图中的红字部分来实现:
但是列号并不是我们最重要的数据,而是第 2 行对应的那一列单元格中的数据才是。
要在一个区域中,按照指定的序号找到相应的数据,我们可以用 INDEX 函数。所以,我们把上面的算式套进 INDEX 函数中就可以能得到计量编号。
INDEX (区域,序数),上面函数公式中 $2:$2 表示固定引用第 2 行整行。所以只需要输入第一个公式,获取项目信息表中第 2 行,第 3 列的数据,剩下的编号,只需要将公式向下填充就能自动得到。
用好 INDEX、COLUMN、ROW 函数,洞察表格和数据之间的规律,可以让很多看似复杂的任务变得更加轻松。
追根溯源
虽然小伙伴提的问题已经解决,但是我们之所以要用到那么复杂的公式,恰恰是因为表格结构设计出了问题。
实际上,更加高效的表格结构设计,应该是横纵分明,把表格当数据来用:
一行一条数据,一列一类信息的进行记录。才更加灵活,更方便我们进行各种查看重复项、筛选、排序、统计等等分析操作。
结构如此复杂的表格是绝对做不到的:
只要我们有数据库式的记录表,当我们需要打印出这样的表格时。完全可以从数据库表中,取出数据填入对应的表格位置中。这样反而会更加简单。
填入的方法有很多,你可以用公式结合下拉列表实现动态查看、可以用 Word 邮件合并批量导入一个固定的模版再打印。
一步到位,直接把打印用的表格和存放信息的表格做成一个表,往往是我们加班熬夜的罪魁祸首。
那现在表格已经做成这样了,怎么把其中的所有信息都提取到信息记录表中,方便进一步统计分析呢?
治本之道
表格已经做成这样了,还有什么办法把每一块表的中,每一个项目的信息提取并汇总到清单中记录呢?
整理数据表格的方法,其实前面已经介绍了,无非是根据需要调整一下公式中的参数,加加减减一些数字,让公式找到对应的单元格。
可是要打印时,又该如何将清单中的每一个项目信息填入对应打印模版中呢?
你可以用 Word 右键合并的方法,方便又快捷。
这里也分享一个用 Excel 搞定的思路。利用下拉列表和函数公式,将清单表中各行信息按编号引入打印输出的表格中。就像下面的效果:
实现的原理其实并不复杂:
❶ 使用【数据验证】,添加一个的下拉菜单
❷ 在 A2 单元格,使用 MATCH 函数,获取在【项目清单】sheet中的位置。
❸ 最后,在等各个单元格里,使用 INDEX 函数,应用出【项目清单】中的数据。
要想充分发挥 Excel 的威力,就必须记住:结构简单,才能灵活高效!
特别推荐伍昊老师的书《你早该这么玩Excel》。他在书中提到的「三表」概念,道出了 Excel 的精髓。
如果想知道最后动图中的效果具体怎么操作,可以戳【阅读原文】一看究竟。
▌关于本文