Это можно решить, используя два небольших макроса (для определения имени последнего листа) в сочетании с оператором диапазона и функцией 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:Sheet3.D4: ссылка на кубоидальный диапазон с 24 ячейками, шириной 4 столбца, высотой 2 строки, глубиной 3 листа.