【结构化引用】高效的数据引用技巧

懒得批爆
懒得批爆

创作者俱乐部成员

本文约3000字左右,多图多例请收藏后阅读。

👋

本人的前几个帖子都提到了对表格的结构化引用

【技巧分享】多数据源合并

https://bbs.wps.cn/topic/38242

【技巧分享】表格公式中的[、#、@的另类使用方法

https://bbs.wps.cn/topic/36914

📌

在社区的互动中,有朋友表示想看到表格结构化引用的详细说明。

什么是结构化引用?

别说是表格新人,就连很多表格老鸟、表格大佬都不一定知道结构化引用这个名词,对于“引用”大佬们说得最多的是绝对引用相对引用

绝对引用和相对引用都属于区域引用,还有一个引用方法是结构化引用

举个最简单的例子:

区域引用:=C2*D2或=C2:C21*D2:D21

结构化引用:=销售明细[业务量]*销售明细[提成]

举例:

🔔

本文示例文档:

https://kdocs.cn/l/crGREIKavVqi

首先按Ctrl + T(Mac:command ⌘+ T)将数据源转换为表:

鼠标方式为插入⇒表格:

表的命名规则

WPS会对新建的表默认命名为表1、表2、表3等,在表格工具标签栏中可以修改表名称为自己方便记忆的名称,对于表名称,有以下命名规则:

  • 使用有效字符 名称始终以一个字母加一个下划线字符 (_) 或一个反斜杠 (\) 开头。 在名称的其余部分中,可使用字母、数字、句点和下划线字符。 名称中不能使用“C”、“c”、“R”或“r”,因为它们已指定为与以下行为对应的快捷方式:在名称转到框中输入这些字母时,选择活动单元格所属的列或行。

  • 不能使用单元格引用 名称不能与单元格引用(例如 Z$100 或 R1C1)相同。

  • 不要使用空格分隔单词 名称中不能使用空格。 可以使用下划线字符 (_) 和句点 (.) 作为单词分隔符。 例如:销售明细销售_增值税标题.一

  • 使用的字符数不超过 255 个 表名称最长可以包含 255 个字符。

  • 使用唯一的表名称 不允许重复的名称。 Excel 对名称中的字符并不区分大小写,因此如果你输入“销售明细”,但同一个工作簿中已经有另一个名称为“销售明细”,你就会收到选择一个唯一名称的提示。

  • 使用对象标识符 如果计划混合使用表、数据透视表和图表,则最好在名称前加上对象类型。 例如:表_销售 代表销售表,透视表_销售 代表销售数据透视表,图_销售 代表销售图表,透视图_销售 代表销售数据透视图。 这会将你的所有名称保存在名称管理器中的排序列表中。

本例修改表名为“销售明细”

如果要计算小计和结算金额,小计=单价×业务量业务提成=小计×业务提成

区域引用的公式,输入=C2*D2然后手动向下复制/双击单元框控制柄/Ctrl + D....

使用结构化引用:

结构化引用的公式:=[@单价]*[@业务量]

更规范的书写方式为:=[@[单价]]*[@[业务量]],这两种写法都没错。

这里结构化引用公式录入后按下回车⏎,表中公式自动向下填充都最后,将来无论是插入列还是删除列都不会影响计算公式,因为结构性引用是表结构引用的,即使说无论这个表在工作簿中的任意位置任意工作表内,使用结构性引用都可以直接引用到。

可能有人会跟着示例尝试了,发现结构性引用在表里面可以成功,在表外面却无法使用,这是什么原因?

因为在表中结构性引用表本身,不需要特别指定,默认就是本表,在表外部录入公式,则需要指定表,否则表格程序不会理解需要引用哪个表(表1、表2、表3、表4....)?

在表以外的区域需要引用表中的数据就需要先加上表名(下文有详细说明)

语法规则

这里说一下结构化引用的语法规则:

语法一

表名称“销售明细”是自定义表名称。它引用表数据(不包含任何标题或汇总行)。可以使用默认的表名称,如表1,也可以更改为自定义名称。

列说明符[小计][业务提成]是使用期所表示的列名称的列说明符。它们引用列数据(不包含任何列标题或汇总行)。 始终将说明符用所示的方括号括起来。

项目说明符[#汇总][#数据] 是引用表的特定部分(如汇总行)的特殊项目说明符。

表说明符[[#汇总],[业务量]][[#数据],[结算金额]] 是表示结构化引用外层部分的表说明符。外部参照跟在表名称之后,并括在方括号中。

结构化引用销售明细[[#汇总],[业务量]]销售明细[[#数据],[结算金额]] 是结构化引用,使用以表名称开头、以列说明符结尾的字符串表示。

有同学会提问为什么演示动图中的=销售明细[[#数据],[业务量]]和=销售明细[@业务量]得到的结果是一样的,而自己做出来的就不一样,是哪里出错了吗?

没有错,这是WPS的问题,WPS for Mac是没有动态数组的阉割版,正常情况下=销售明细[[#数据],[业务量]]得到的应该是数组,后文开始用Excel for Mac做个演示:

心细的同学可能发现了一个小问题,为什么在Excel里输入表名后会有结构化引用的列表供选择,自己在Windows上就没有这个提示,难道这是Windows和Mac的差异吗?

其实.....

无论是Windows还是Mac的Excel中输入表名后都会有结构化引用的列表提示供选择,无论是Windows还是Mac的WPS在输入表名后都不会提示结构化引用,也许这印证了本文开头的那句话...

📌

语法二

言归正传,继续说明结构化引用的语法:

手动创建或编辑结构化引用,使用一下语法规则:

使用括号将说明符括起来所有表格、列和特殊项目说明符都需使用一对方括号 ([ ]) 括起。 对于包含其他说明符的说明符,需要在其他说明符的内方括号对的外侧使用方括号对括起。 例如,=销售明细[[业务员]:[地区]]

所有列标题都为文本字符串但它们用于结构化引用中时不需要使用引号。 数字或日期,例如 2014 或 2014/8/1,也被视为文本字符串。 不能对列标题使用表达式。 例如,表达式 销售明细[[2014]:[2012]] 将不起作用。

用方括号将包含特殊字符的列标题括起来:如果包含特殊字符,整个列标题就需要括在括号中,这意味着列说明符中需要使用双重括号。

结构化引用中涉及到的特殊字符包括以下列表:

为了怕各位看不清楚这些符号,特地配上Unicode值(后文有特殊字符的文档链接)

对列标题中的特殊字符使用转义字符 某些字符具有特殊的含义,需要使用单引号(')作为转义字符,下面是公式中需要专一字符的特殊字符列表:

语法三

使用空格字符提高结构化引用的可读性 可以使用空格字符来提高结构化引用的可读性。 例如:=销售明细[[业务员]:[地区]]=销售明细[[#标题],[#数据],[业务提成]]

(丐版WPS不配拥有动态数组,只好请出Excel来做演示)

建议在以下位置使用一个空格,以提高结构化引用的可读性:

  • 在第一个左中括号后

  • 在最后一个右中括号后

  • 在逗号后

运算符

为了在指定单元格区域时增加灵活性,可以使用以下引用运算符来组合列说明符。

特殊说明符

要引用表格的特定部分(例如只引用汇总行),可以在结构化引用中使用下列任意特殊项目说明符。

计算列中的限定结构化引用

创建计算列时,通常使用结构化引用来创建公式。 此结构化引用可以是非限定的,也可以是完全限定的。 例如,“结算金额”列中,可以使用以下公式:

应遵循的一般规则为:如果在表格内使用结构化引用(例如在创建计算列时使用),则可以使用非限定的结构化引用,但如果在表格之外使用结构化引用,则需要使用完全限定的结构化引用。

📌

特殊说明符文档:

https://kdocs.cn/l/cmSnfJNfefs5

特别鸣谢本次知识分享参与者

谢谢阅读

投票哪种引用方式更适合你?(2选2)
  • 结构化引用 4
  • 区域引用 4
4人参与 投票已截止
四川省
浏览 1775
4
10
分享
10 +1
6
4 +1
全部评论 6
 
Chadwick
学到了,批总
· 河北省
回复
 
Chadwick
这投票···全都要
· 河北省
回复
 
Tam Kingsley
Tam Kingsley

创作者俱乐部成员

点赞,终于看见老师更新详细了~
· 广东省
回复
 
ice y
ice y

创作者俱乐部成员

好家伙2选2
· 四川省
回复
懒得批爆
懒得批爆

创作者俱乐部成员

意义在于不要抛弃任何引用方式
· 四川省
回复
 
HC.旋
哇。给大佬点赞
· 福建省
回复