我有 2 个工作簿,每个工作簿包含 60 多个工作表。我需要将数据从一个工作簿复制到另一个工作簿,但想在单元格中捕获并使用工作表名称。这是因为当我创建工作簿时,我会制作一个主工作表,然后将其复制 60 多次。上述操作将使每个工作表的单元格引用成为另一个文件中的相应工作表单元格。
答案1
问题
我猜你有两个工作簿(即 Microsoft Excel.xls
电子表格文件);我们把它们称为Master.xls
和Book2.xls
。并且[Master.xls]Sheet1
包含
A B C
1 =[Book2.xls]Sheet1!A1 =[Book2.xls]Sheet1!B1 =[Book2.xls]Sheet1!C1 ...
2 =[Book2.xls]Sheet1!A2 =[Book2.xls]Sheet1!B2 =[Book2.xls]Sheet1!C2 ...
问题是,当你创建 的[Master.xls]Sheet2
副本时[Master.xls]Sheet1
,它也会得到
A B C
1 =[Book2.xls]Sheet1!A1 =[Book2.xls]Sheet1!B1 =[Book2.xls]Sheet1!C1 ...
2 =[Book2.xls]Sheet1!A2 =[Book2.xls]Sheet1!B2 =[Book2.xls]Sheet1!C2 ...
但您希望 中的单元[Master.xls]Sheet2
格引用而不是。[Book2.xls]Sheet2
[Book2.xls]Sheet1
答案
建立一个“辅助细胞”;比如说Z1
——在某个不碍事的地方。(你不需要真的需要有这个“辅助单元格”,但如果没有,事情会变得更加混乱。)用一个计算当前工作表名称的公式填充它,如
是否可以获取 sheetname?, 例如
=MID(CELL("filename"), FIND("]",CELL("filename"))+1, 256)
然后将单元格设置Master.xls
为
=INDIRECT("[Book2.xls]" & $Z$1 & "!R" & ROW() & "C" & COLUMN(), FALSE)
解释
[Master.xls]Sheet42!Z1
计算结果为Sheet42
,因此,在 中的每个单元格中[Master.xls]Sheet42
, 的第一个参数的前两项INDIRECT
将计算为[Book2.xls]Sheet42
。并且,在S17
任何工作表的单元格(例如)中,
ROW()
将计算为17
,并将COLUMN()
计算为19
,因此最后四项加起来为!R17C19
。将它们全部放在一起,您就会得到
=INDIRECT("[Book2.xls]Sheet42!R17C19", FALSE)
当第二个参数为时INDIRECT
,FALSE
它将字符串解释R17C19
为S17
;因此这相当于
=INDIRECT("[Book2.xls]Sheet42!S17")
相当于
=[Book2.xls]Sheet42!S17