Найти сумму ячейки из разностных таблиц без ссылки на имена листов - PullRequest
0 голосов
/ 10 января 2020

У меня есть рабочая тетрадь с несколькими листами. Все названия листов соответствуют схеме «Состояние датчика», «Состояние датчика (1)» и т. Д. Есть ли способ получить СУММУ I4 из всех этих листов, не ссылаясь на название каждого отдельного листа? Я попробовал это, однако я получаю ошибку ref. «A5» имеет значение «сенсор», так как я пытаюсь использовать подстановочные знаки в листе ссылки формулы.

=SUM(INDIRECT("'*"&A5&"*'!K4"))

Ответы [ 2 ]

0 голосов
/ 10 января 2020

в VBA:

Function SumbyCell(rng As Range) As Double
Dim sum As Double
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
sum = sum + ws.Range(rng.Address).Value2
Next ws
SumbyCell = sum
End Function

Функция будет работать независимо от имени листа.

Вызов функции по типу: = Sumbycell(I4)


с функцией:
Предположим, у вас есть 2 листа имен соответственно: sheet1, sheet2

Ваша функция:

= CONCAT (SUM (INDIRECT ("sheet" & ROW (1: 2) & "! I4"))))

type: ctrl + shift + enter

0 голосов
/ 10 января 2020

Вы можете сделать что-то подобное для Sensor Status(#)

=SUM(INDIRECT("'Sensor Status("&ROW(1:5)&")'!K4"))

. Эта формула массива должна быть подтверждена с помощью Ctrl-Shift-Enter вместо Enter.

ПРИМЕЧАНИЕ. Может быть в состоянии использовать SUMPRODUCT вместо SUM, чтобы избежать записи CSE.

Но для этого требуется массив, который предоставляет ROW(1:5). Если это не идеально, тогда понадобится vba или перечисление листов в столбце с указанием на это.

См. Этот ответ с дополнительными параметрами: Как можно суммировать одну и ту же ячейку по нескольким листам по листам порядковый номер в excel?


Можно сделать гибрид vba и формулы.

В модуль, прилагаемый к рабочей книге, положить:

Function SHEETNAME() As Variant
Application.Volatile

Dim temp() As Variant
ReDim temp(1 To Application.Caller.Parent.Parent.Worksheets.Count) As Variant

Dim i As Long
For i = 1 To Application.Caller.Parent.Parent.Worksheets.Count
    temp(i) = Worksheets(i).Name
Next

SHEETNAME = temp
End Function

Это возвращает все имена листов в виде массива. Затем используйте что-то вроде этого:

=SUMPRODUCT((ISNUMBER(SEARCH(A5,SHEETNAME())))*SUMIF(INDIRECT("'"&SHEETNAME()&"'!K4"),">0"))
...