我有一个包含多张工作表的电子表格,每张工作表都跟踪一个特定主题。每张工作表中都有原始数据的列,以及一个单元格(始终在 F1 中),其中包含原始数据的计算统计数据。
我会定期添加新表。
我还想有一个“摘要”表,比如说,SUM
F1 中的统计数据来自其他所有表。我知道我可以手动指定表,例如
SUM(FirstSheetName.F1;AnotherName.F1;...)
但每次添加新工作表时都需要手动维护该字段,我想我会忘记这样做。有没有办法指定一个公式来将(比如 glob 或类似的东西)应用于工作表名称,这样我就可以做更多类似的事情SUM(*.F1)
答案1
您可以使用两个小宏(确定最后一张表的名称)结合范围运算符和INDIRECT()
功能。
首先,创建以下宏(Tools
-> Macros
-> LibreOffice Basic
,创建一个新模块或使用默认模块;粘贴以下代码):
Function LastSheetName()
Dim nSheetCount As Integer
nSheetCount = ThisComponent.getSheets().Count
LastSheetName = ThisComponent.getSheets().getByIndex(nSheetCount - 1).getName()
End Function
Function LastSheetCell(sCell)
LastSheetCell = LastSheetName() & "." & sCell ' notice: sheet/cell separator may be "!"
End Function
注意:根据您的本地化设置,您可能必须用感叹号替换函数.
中的点:LastSheetCell()
LastSheetCell = LastSheetName() & "!" & sCell
定义此宏后,您可以在工作表中使用此用户定义函数:
=LASTSHEETNAME() ' returns e.g. "Sheet10" as String
=LASTSHEETCELL("F1") ' returns e.g. "Sheet10.F1" as String
=INDIRECT(LASTSHEETCELL("F1")) ' returns a cell reference to "Sheet10.F1"
现在,您已经拥有构建最终公式所需的所有组件:
=SUM(FirstSheetName.F1:INDIRECT(LASTSHEETCELL("F1"))) ' returns the sum of FirstSheetName.F1; ...; LastSheetName.F1
请注意创建对最后一张工作表单元格的引用的公式:这:
就是FirstSheetName.F1
范围运算符。您也可以使用它来引用一系列工作表。摘自 OOo Calc 文档:
工作表 1.A3:工作表 3.D4:参考一个有 24 个单元格、4 列宽 × 2 行高 × 3 页深的长方体范围。