在一个含有合并单元格数据的表格进行查询分析时,我们遇到了挑战。具体来说,表1记录了一组项目统计数据,详尽展示了各项目在不同年份的表现情况。现需构建一张表2作为查询报表,其功能应为:当用户输入特定年份后,报表能准确呈现该年份内所有项目的相关数据。
本应是一个简易的查询任务,却因表1中存在合并单元格而变得复杂。源表为了保持格式整齐与视觉美感,对合并单元格的使用有所坚持,既不允许取消现有合并,也不接受通过增设辅助列的方式来简化查询过程。这就对我们在不破坏源表结构的前提下,实现高效、精准的年度数据查询提出了较高要求。
需求分析要确保在表2中录入查询年份后,报表能准确展示该年份内所有项目的相关数据,首先需要取消合并单元格,并对由此产生的空白单元格进行数据填充,将其整理成一个规范的一维数据表。关键挑战在于如何在不借助辅助列的情况下构建单一连续的数组。即将发布的WPS办公软件中的SCAN函数恰好能够有效应对这一难题。
利用SCAN函数,可以针对取消合并单元格后出现的空值进行迭代处理。具体操作如下:对每个单元格(用变量Y表示)进行判断,若Y值为空,则保留前一次迭代的结果(即变量X的值);反之,若Y非空,则将当前单元格的Y值作为结果输出。如此一来,SCAN函数便能自动跳过空白单元格,连贯地串联起非空数据,生成所需的一维数组,从而无需额外使用辅助列。
综上所述,借助WPS即将推出的SCAN函数,通过对其迭代过程中遇到的空单元格进行智能判断与处理,能够在无需辅助列的条件下,高效地将取消合并后的表格整理成标准的一维数据表,确保报表能够准确反映所查询年份内所有项目的相关数据。
单列取消由于表格中存在多列合并的单元格,为了便于大家清晰理解函数公式的计算逻辑,我们将分步骤展示其构成,最终再整合成完整的公式。首先,请在单元格中键入以下第一步的函数:
=SCAN("",D3:D12,LAMBDA(X,Y,IF(Y="",X,Y)))
此公式旨在处理取消合并后的单元格,通过SCAN函数逐步遍历范围D3:D12。当遇到空单元格(即Y=""),函数保留前一次迭代的结果X;对于非空单元格,则返回当前单元格的值Y。执行完毕后,将得到已消除合并影响、填充了空白单元格的有序数据结果。
多列取消若需对多列合并单元格进行处理,一种简便的做法是分别应用上述针对单列取消合并单元格的公式逻辑。然而,随着处理列数增多,相应的公式将会显著增长,显得冗长且不易管理。为避免这种重复操作,可巧妙引入转置函数,从而简化整个过程。
录入以下函数:
=TRANSPOSE(SCAN("",TRANSPOSE(B3:G12),LAMBDA(X,Y,IF(Y="",X,Y))))
借助转置函数(如TRANSPOSE),通过两次巧妙的应用,我们可以高效地处理多个合并单元格,避免对多列合并单元格进行繁琐的重复取消操作。这种方法不仅显著提升了处理效率,还确保了公式的简洁性。
效果如下图所示:
筛选查询上面的公式实现了取消合并单元格的效果,将源数据巧妙的转换成一个标准的一维数据后,就可以配合筛选函数进行筛选查询了,其中查询的条件就是筛选条件。
录入公式:
=FILTER(TRANSPOSE(SCAN("",TRANSPOSE(B3:G12),LAMBDA(X,Y,IF(Y="",X,Y)))),E3:E12=J1)
函数释义:
已筛选数据区域B3:G12(该区域为已取消合并的单元格),筛选条件设定为E3:E12列数值等于查询条件J1(设定为“2020”)。经过筛选,成功返回了两行数据,分别对应北京和宁波的项目A与B。至此,完成了对合并单元格数据的查询报表设计。
图文看不明白,周一到周五晚上:20:00-20:30
抖音 关注 “古哥计划”,古老师直播讲解
和古哥一起学习PMC生产计划运营,一辈子够不够?