再也不怕被修改表格名称,跨表获取不到数据啦!

使用 IMPORTRANGE 函数跨表引用数据的时候,有时候会遇到表格名称被修改,导致提示 #REF! 错误。因为 IMPORTRANGE 函数的参数是文本类型,所以无法根据表格名称的变化而正确的获取到最新的表格名称。

解决方法

建立一个辅助表,然后分表引用一个单元格,例如:='工作表1'!A1

使用下面的公式可以从引用的单元格识别出单元格的名称。

=IF(TODAY() < TRUE, REGEXREPLACE(FORMULATEXT(A1), "...$|[=']", ""))

先来拆分出来理解一下这个公式运行的过程。

首先运行的是 FORMULATEXT(A1),使用 FORMULATEXT 函数以文本的格式输出单元格内的公式。

使用 REGEXREPLACE 函数对表格名称以外的字符进行替换,正则表达式 语法 …$|[='],获取 = 和 ' 符号,还有末尾三位的 !A1,然后替换成空值。这样就得到了表格名称。

虽然现在已经获取到了表格名称,但是还不完善,现在获取到的数据是静态的,也就是说当修改了分表的名称的时候,公式并不会更新表格的名称,需要再次编辑单元格才会更新。

使用易失函数达到动态更新的效果,因为使用易失函数后,在表格内修改任意一个单元格后,会引起所有相关公式重新计算。

使用 TODAY 函数做一个判断,例如 TODAY() < TRUE,返回值是 TRUE,因为布尔型的值要比其它 数据类型 都要大。

IF 函数做一个判断,判断结果为 TRUE,返回获取表格名称的公式,这样在修改表格的时候,就会更新表格的名称了。

最后使用 IMPORTRANGE 跨表引用辅助表里面的表格名称,即使在分表修改了名称,也会同步更新。

=IMPORTRANGE("SheetID", IMPORTRANGE("SheetID", "辅助表!B1")&"!A:A")