我有一个文档,我在其中创建了一个表示日期的新工作表(必须这样)。每个工作表都引用了工作表中表示前一天的同一单元格。因此,工作表“星期二”从工作表“星期一”中提取一些值,依此类推。公式为:
Description Amount
="Saldo from "&TEXT($'Day03'.C4,"DD.MM.YYYY.") =$'Day03'.F33
我看到的结果如下Saldo from 1 June 2016, Amount $55.00
如果我创建一个新工作表并命名它Day05
并粘贴工作表的内容Day04
,是否有办法更新引用的公式Day03
?Day04
目前,内容仍然从工作表中提取数据Day03
。
简而言之,当我复制 sheet 的内容时Day04
,我希望看到公式更新为:
Description Amount
="Saldo from "&TEXT($'Day04'.C4,"DD.MM.YYYY.") =$'Day04'.F33
目前,工作表名称引用不会更新,并且我的Day05
工作表仍然从中提取数据Day03
Description Amount
="Saldo from "&TEXT($'Day03'.C4,"DD.MM.YYYY.") =$'Day03'.F33 //<-- WRONG is 03 ref!
答案1
问题是创建一个新的工作表,复制现有工作表的内容,并将单元格的引用更改为第二个现有工作表。萨蒂亚·米什拉说,可以通过在复制到新工作表后更改'Day03'!
为来手动完成。'Day04'!
Day05
为了在从上一个工作表复制到新工作表时自动进行更改,让我们重新陈述问题:创建一个新工作表并复制上一个工作表的内容。使用新工作表的名称来引用上一个命名的工作表。
这是当前工作表中的公式,它从上一个命名工作表中获取单元格的内容F33
。例如,如果当前工作表是Day05
,则公式F33
从工作表中获取Day04
。
=INDIRECT(CONCATENATE("'日",TEXT(MID(CELL("文件名",$A$1),FIND("]",CELL("文件名",$A$1))+4,255)-1,"0#"),"'!","F33"))
公式如何运作
该公式用于INDIRECT
从上一张工作表中获取单元格值。如果当前工作表为 ,Day05
并且我们想要单元格F33
,则需要一个引用工作表中INDIRECT
单元格的字符串。我们需要的字符串是。F33
Day04
'Day04'!F33
- 获取工作表名称当前工作表。
Day05 =MID(CELL("文件名",$A$1),FIND("]",CELL("文件名",$A$1))+1,255)
- 通过将 +1 改为 +4,修改公式以获取工作表名称末尾的数字。这样会跳过 3 个字符“Day”。
05 =MID(CELL("文件名",$A$1),FIND("]",CELL("文件名",$A$1))+4,255)
- 减去 1 即可得到上一张表的数字部分。
4 =MID(CELL("文件名",$A$1),FIND("]",CELL("文件名",$A$1))+4,255)-1
- 用于
TEXT
在数字前填充前导零。
04 =TEXT(MID(CELL("文件名",$A$1),FIND("]",CELL("文件名",$A$1))+4,255)-1,"0#")
- 使用
CONCATENATE
对单元格的引用来创建新的工作表名称F33
。
'Day04'!F33 =CONCATENATE("'Day",TEXT(MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+4,255)-1,"0#"),"'!","F33")
使用公式
无论您想要上一张表中的单元格值,都可以使用公式代替单元格引用,并将公式中的最后一个字符串更改为单元格引用。例如,要使用单元格C4
显示说明(请注意C4
公式中的说明):
=“Saldo 来自“&TEXT(INDIRECT(CONCATENATE(”'Day“,TEXT(MID(CELL(”filename“,$A$1),FIND(”]“,CELL(”filename“,$A$1))+4,255)-1,“0#”),“'!”,“C4”)),“DD.MM.YYYY。”)
结果是Saldo from 01.06.2016.
条件和注意事项
- 每个工作表名称必须以两个数字结尾,例如,,,
Day02
等等Day03
。 - 除非新工作表具有正确的名称,否则公式将不起作用。错误的工作表名称会导致
#VALUE!
错误。
答案2
我还没有找到任何方法可以自动完成此操作。但“搜索和替换”(Ctrl+H)似乎有效。
答案3
感谢 Scott Craner 的评论,我找到了解决方案。我警告你,这将是一个很长的公式。
无论你在哪里得到“DayXX”和 XX 号码,你都可以将 XX 更改为
&MID(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255),FIND("y";MID(CE("filename",A1),FIND("]";CEL("filename";A1))+1,255))+1,2)-1
这将查找文件名并从 day 中搜索 y,然后从文件名中提取数字并从中减去 1。如果您愿意,我可以进一步解释,只需添加评论即可。
答案4
当我们更改工作表的名称时,Excel 会调整对工作表的引用。所有引用都会自动重命名。让我们尝试使用此功能解决问题:我们不需要重命名引用,而是重命名工作表。
- 打开包含每日工作表的工作簿。
- 像之前一样,使用新一天的数据(例如“Day05”)创建工作表。最后,从 Day04 工作表中复制公式(无论它们在复制后是否仍引用 Day03),然后保存。不要关闭工作簿!
- 打开另一个工作簿(可能是空的)以保存临时引用,然后移动 Day05 表(为此,右键单击 Day05,选择“移动或复制...”并选择其他工作簿作为目标)。
- 删除工作表“Day04”并将工作表“Day03”的名称更改为“Day04”。这是最棘手的部分!
现在您可以看到,由于重命名,新工作簿中的“Day05”工作表的引用将设置为 Day04(来自第一个工作簿),而不是 Day03。接下来,让我们将此工作表移回原始工作簿。
- 关闭原始工作簿,放弃上次保存后所做的更改。
- 重新打开工作簿并移回临时工作簿中的 Day05 工作表。引用仍指向 Day04(来自当前工作簿),因为我们放弃了更改,而不是重新命名工作表。
瞧!这是让 Excel 为我们重命名引用的技巧。
乍一看,这可能并不容易,但我认为它比使用公式或 VBA 更容易,因为您无需编程知识即可控制步骤。此外,它比重命名每个引用更容易。
希望能帮助到你!
编辑1
当然,您可以使用此活动录制宏,甚至对其进行调整,以便能够更快地调用它。