2

У меня есть таблица с множеством листов, каждый из которых отслеживает определенную тему. На каждом листе находятся столбцы необработанных данных и ячейка (всегда в F1), которая содержит вычисленную статистику для необработанных данных.

Я буду добавлять новые листы с некоторой регулярностью.

Я также хотел бы иметь сводный лист, который, скажем, будет SUM эту статистику в Ф1 с любого другого листа. Я знаю, что могу вручную указать листы как

SUM(FirstSheetName.F1;AnotherName.F1;...)

но это потребует ручного обслуживания этого поля каждый раз, когда добавляется новый лист, что, я полагаю, я забуду сделать. Есть ли способ указать формулу для применения, скажем, глобуса или чего-то подобного к именам листов, чтобы я мог сделать что-то более похожее на SUM(*.F1)

1 ответ1

3

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .