ссылки на листы по номеру вместо названия в ячейках
Скажем
sheet3.name = "d"
Есть ли способ поместить в ячейку на sheet2
формулу =sum(sheet3!b:b)
, где sheet3
заменяется фактическим именем листа 3?
=sum('d'!b:b)
.
Я мог бы использовать VBA для этого, вероятно, но мне любопытно, как это сделать в ячейке, чтобы мне не приходилось запускать макрос каждый раз.
3 ответа:
Если вы можете использовать пользовательскую функцию UDF , которая вернет имя листа
Function SHEETNAME(number As Long) As String SHEETNAME = Sheets(number).Name End Function
Тогда формула, подобная
=SUM(INDIRECT(SHEETNAME(3) &"!B:B"))
Вернет сумму из столбца B на листе 3.
SHEETNAME(number)
возвращает имя листа числа, которое является индексом.So
Sheet(1)
возвращает Sheet1, etc
Используйте приведенную ниже формулу в любом месте листа, чтобы получить имя листа-лист должен иметь имя файла для этого:
=REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")
Вы можете либо ссылаться на эту ячейку, используя косвенное:
=SUM(Indirect("'"&A1&"'!B:B"))
Или, если вы не хотите иметь вторую ячейку, вы можете объединить две формулы в одну:
=SUM(INDIRECT("'"&REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")&"'!B:B"))
Я не уверен, что это хорошая идея, но это первое, что мне пришло в голову.
Я бы добавил дополнительную функцию к вашему проекту VBA, которая вернет фактическое имя вашего листа 3:
Function Sheet3Name() Sheet3Name = Sheet3.Name End Function
Далее, когда вы создаете формулу суммы столбца B:B в ячейке Excel, вам нужно сделать это следующим образом:
=SUM(INDIRECT(Sheet3Name()&"!A:A"))