制作一个动态单元格目录,快速找到对应菜单。

在遇到一个特别宽表格的时候,横向找内容就会比较费劲,这个时候就需要使用指向单元格的链接功能建立一个超链接,点击链接就可以跳转到对应的标题。

但是这样的方法存在一个问题,当表格增加新的列的时候,之前引用的范围就会发生偏移,就会导致对应不上。

解决方法

使用以下函数即可实现动态指向单元格目录。

=ARRAYFORMULA(HYPERLINK("#gid=id&range="&ADDRESS(1, MATCH(TRANSPOSE(FILTER(B1:1, B1:1 <> "")), 1:1, 0), 4), TRANSPOSE(FILTER(B1:1, B1:1 <> ""))))

先来分析一下指向单元格的原理。

超链接的格式:#gid=XXXX&range=B1,中间的 gid 是当前表格的 id,range 对应的参数是指向单元格的位置。那么就可以使用 HYPERLINK 函数创建一个超文本链接,但是目前还需要获取到菜单的名称和菜单对应的单元格位置。

获取菜单名字

使用 FILTER 函数获取菜单的内容,FILTER(B1:1, B1:1 <> "") 并且去掉空的单元格,这样会比较严谨,如果是多个单元格合并的菜单也可以兼容。


不过我们需要的是纵向的菜单,使用 TRANSPOSE 将内容进行转置。

获取单元格位置

在获取菜单名字的基础上,再使用 MATCH 函数查询每个菜单出现的位置,并且使用数组输出查看效果。

在此基础上添加 ADDRESS 参数,行数设置第一行,列数放入刚才的参数,引用模式要选择相对引用行和列,因为指向单元格功能不支持绝对引用。

超文本链接输出

最后再使用 HYPERLINK 函数放入菜单名字和单元格位置一起输出。因为指向单元格链接的格式中的 gid 无法通过原生函数获取到,所以需要手动设置,并且和获取到菜单的单元格位置拼接在一起。

HYPERLINK("#gid=1147213490&range="&ADDRESS(1, MATCH(TRANSPOSE(FILTER(B1:1, B1:1 <> "")), 1:1, 0), 4), TRANSPOSE(FILTER(B1:1, B1:1 <> "")))

最后再使用 ARRAYFORMULA 函数输出就可以实现动态指向单元格目录了,即使菜单使用合并单元格也不会影响。