制作一个动态单元格目录,快速找到对应菜单。
在遇到一个特别宽表格的时候,横向找内容就会比较费劲,这个时候就需要使用指向单元格的链接功能建立一个超链接,点击链接就可以跳转到对应的标题。
但是这样的方法存在一个问题,当表格增加新的列的时候,之前引用的范围就会发生偏移,就会导致对应不上。
解决方法
使用以下函数即可实现动态指向单元格目录。
=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 函数输出就可以实现动态指向单元格目录了,即使菜单使用合并单元格也不会影响。