【回复贴】如何运用动态数组做一个查询表
创作者俱乐部成员
🔔 |
第一步,下载了提问中的文件。
这个提问和本人前不久发布的
💡 | 【技巧分享】下拉列表转列表框 |
有异曲同工之效,所以想将其做成列表查询的状态,但是本人现在出差中,随身携带的是Mac的笔记本,Mac版WPS不支持开发工具,故本次用Excel作为演示示例,本例中Excel所有的操作均可在Windows版WPS中实现,也可通过本人分享的示例文档进行复制修改为所需的文档。
用Excel打开下载的文件
操作第一步
将数据源通过Ctrl + T(Mac系统快捷键为command ⌘+ T)转换为表,后续公式将使用结构化引用便于直观理解公式的使用方法,关于结构化引用可以参考本人的分享贴:
📌 | 【结构化引用】高效的数据引用技巧 |
操作第二步
如果不希望出现控件列表,可跳过操作第二步至第四步,请直接跳到第五步。
规范化客户电话列表
在任意位置输入=UNIQUE(表2[客户电话]),公式意思为对表2中客户电话字段进行去重处理,这个辅助列可以放在任意不需要显示结果的位置,不影响最终结果。
操作第三步
制作查询列表
在开发工具中选择列表框(WPS中可能位置和描述稍有不同,图标是相同的)
在空间上右键选择,设置控件格式
考虑到可能后续会需要对数据源更新数据,所以这里多选择了几行数据(也可不选择那么多)
操作第四步
设置查询框,输入公式=INDEX(B18:B30,B16),同样选择到多几行数据,这里的查询框也同上一步的辅助单元格一样,可以放在任意不需要显示结果的位置,不影响最终结果。
第二步,跳到这里来请往下看查询表的制作过程
操作第五步
编辑查询公式
在H5中录入:=FILTER(表2[客户订单号],表2[客户电话]=查询表!C4)
这个公式的具体含义如下:
首先是FILTER函数的语法结构:FILTER(筛选数据组,筛选条件)
这里的前提条件是:表1=取货登记,表2=客户订单登记
从结构化引用的语法上来看:=FILTER(表2[客户订单号],表2[客户电话]=查询表!C4)的含义为,从
表2[客户订单号]中筛选,表2[客户订单号]等于C4的数据,即
接着在I5单元格录入公式:=FILTER(表2[批号],表2[客户电话]=查询表!C4)
这段公式的含义为,在表2[批号]中筛选,表2[批号]=C4,即电话号码,所以这里能看出,这个电话号码的辅助单元格在任意位置不重要,重要的是这个列表在什么位置。
操作第六步
在J5单元格中录入公式=XLOOKUP(H5#,表1[订单号],表1[价格],0,0),这里不用FILITER函数了,这里用XLOOKUP函数,一参查找函数使用数组引用范围H5#,这里的H5#表示引用了=FILTER(表2[客户订单号],表2[客户电话]=查询表!C4)这个公式所展示的所有单元格,下面的单元格公式也会用到H5#数组引用范围,后面将不在赘述。
操作第七步
在L5单元格中录入=XLOOKUP(H5#,表1[订单号],表1[取货日期],0,0),这里使用了XLOOKUP函数,含义如同上一步。
操作第八步
这里生成自动序号列表,这里也将使用动态数组
在G5单元格中输入公式=SEQUENCE(COUNTA(H:H)-2)
这里的的SEQUENCE函数表示生成一个数组,数组由4个参数组成
二参:列数(可省略,省略后默认1)
三参:起始数(可省略,省略后默认1)
四参:步进数(可省略,省略后默认1)
本例中,一参使用的是通过COUNTA计数H列的非空单元格,-2(H3和H4为2个单元格),其他参数省略后,均默认为1(1列、起始1,步进1)
第三步,美化
操作第九步
将需要隐藏的隐藏起来
其中C4单元格,B12:B30单元格均可隐藏,或放在某个sheet中隐藏工作表,得到的就是一个完整的查询表。
👋 | 由于金山文档不支持控件,故本例文档存放在某网盘,地址如下: 链接: https://pan.baidu.com/s/1V8GjiCyWQEecA0RSv2zFrg 提取码: fbs7 |