用Excel制作动态查询信息系统

通过准备数据源以及查询表格两个步骤我们准备好了图片并批量导入了数据源表中。本篇我们就做出查询表。查询表的最终效果如下:

动态查询

我们根据上一步骤完成的带有图片的数据源,做一个动态查询档案,输入姓名即可查询到照片、性别、出生日期等。做好了之后是这样的:

怎么操作呢?步骤如下:
(1)首先创建以下表格。
创建表格模版
并且准备好数据源
数据源
(2)在姓名对应的B3单元格输入“张飞”。

(3)接下来“性别”“出生年月”等其他信息的获取,我们根据姓名“张飞”采用一个公式来完成。在性别对应的B5单元格输入
获取信息
性别:    =IFERROR(OFFSET(数据源!$A$3,MATCH($A$3,数据源!$A:$A,0)-1,MATCH(查询!A5,数据源!$1:$1,0)-1),"")
出生年月:    =IFERROR(OFFSET(数据源!$A$3,MATCH($A$3,数据源!$A:$A,0)-1,MATCH(查询!A8,数据源!$1:$1,0)-1),"")
血型:    =IFERROR(OFFSET(数据源!$A$3,MATCH($A$3,数据源!$A:$A,0)-1,MATCH(查询!A10,数据源!$1:$1,0)-1),"")
星座:    =IFERROR(OFFSET(数据源!$A$3,MATCH($A$3,数据源!$A:$A,0)-1,MATCH(查询!D8,数据源!$1:$1,0)-1),"")
职业:    =IFERROR(OFFSET(数据源!$A$3,MATCH($A$3,数据源!$A:$A,0)-1,MATCH(查询!D10,数据源!$1:$1,0)-1),"")


解析:

MATCH(查找内容,查找区域,0):表示查找第一个参数在第二个参数的位置,第三个参数为0代表精确匹配。这里分别返回的是B2单元格“张飞”在数据源A列(姓名列)对应的位置2和A3单元格“性别”在数据源第1行(标题行)对应的位置2。

OFFSET(参照位置,偏移的行位置,偏移的列位置):表示以第一个参数为位置参照,偏移到第二参数定义的行数和第三参数定义的列数所在的单元格,返回其值。这里的含义是以“数据源”表里的A1单元格为准,向下偏移2-1行向右偏移2-1列,获取到B3单元格值“男”。

在上述OFFSET函数中,如果B3单元格为空,则返回错误信息“N/A”。我们利用IFERR0R函数,当单元格返回错误“N/A”则输出为空值。

因为后续还要查询“出生年月”“星座”等,所以公式中“查询!A10”这个是相对引用,其他都采用了绝对引用。 

然后把这个公式复制应用到“出生年月”“星座”等对应的单元格里。注意修改相对引用项。

(4)接下来我们要把图片动态引用过来。

单击【公式】选项卡下的名称管理器旁边的“定义名称”。
=INDEX(数据源!$G:$G,MATCH(查询!$B$3,数据源!$A:$A,0))


在在弹出的对话菜单中,【名称】处输入“照片”,【引用位置】输入公式:

=INDEX(数据源!$G:$G,MATCH(查询!$B$2,数据源!$A:$A,0))
定义名称
解析:

MATCH:表示查找第一个参数,也就是姓名“张飞”单元格在第二个参数数据源姓名列的位置,返回3。
INDEX(数据区域,数据位置):表示用第二个参数给出的位置在第一个参数中查找对应的值。
上述公式的意思就是利用INDEX函数返回数据源G列(图片列)中对应行号(由MATCH函数获取)位置的图片。 

(5)复制数据源表任意一张照片,粘贴到“查询”表的D3单元格。单击该照片,在编辑栏中输入公式:=照片,点击Enter。

这样当B3单元格输入姓名后点击确定,对应的照片和其他信息就会一起动态更新了。

注意:使用这种方法时,当姓名为空的时候或者姓名错误的时候,仍然会显示上一次操作之后的照片。 

Ok,整个查询系统就建立好了。简单回顾一下:利用PS的动作批处理实现图像不变形下统一大小;利用表格标签table代码实现图像批量插入;利用INDEX函数定义“照片”实现照片的动态查询。其他信息的动态查询则是利用OFFSET函数实现的。