Страницы: 1
RSS
Как сделать ссылку на предыдущий лист
 
Есть книга со множеством листов нужно примерно так Лист 1, Лист2, Лист3  (Ячейка  Лист2!C1=Лист1!А1 если я меняю порядок листов Лист1, Лист3, Лист2, то ячейка  Лист2!С1  нужно чтобы ссылалось на Лист3!А1. т.е нужно чтобы ячейки ссылались на предыдущий лист автоматически при перемещение листов
 
Простая функция, которая возвращает порядковый номер листа:    
Код
Function SheetNo()   
Application.Volatile   
SheetNo = Application.Caller.Parent.Index   
End Function   
 
А дальше ДВССЫЛ:  
=ДВССЫЛ("Лист"&sheetno()-1&"!A1")
 
а если названия листа меняются и не сотержат слово "Лист"
 
Тогда еще одна простая функция, которая возвращает имя листа по номеру:    
Код
Function SheetName(iSheetNo As Long) As String   
SheetName = Sheets(iSheetNo).Name   
End Function 
 
И, соответственно,    
=ДВССЫЛ(sheetname(sheetno()-1)&"!A1")
 
Цитата
а если названия листа меняются и не сотержат слово "Лист"
Код
Function SheetName()   
Application.Volatile   
If Application.Caller.Parent.Index > 1 Then SheetName = Application.Caller.Parent.Previous.Name   
End Function  
   
И формула      
=ДВССЫЛ("'"&sheetname()&"'!A1")
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Как я понял - Листы А, Б, В. Переместили , допустим, Б -  А, В ,Б  
Формулы листа А ссылались на Б, теперь на В.  
Могу ошибаться, но это нерешаемо.
 
Дописал функцию SheetNo, чтобы по имени листа можно было определять его номер. Если аргумент опущен или равен "", то, как и раньше, возвращается номер листа, из которого вызвана ф-я:    
Код
Function SheetNo(Optional sName As String) As Long   
Application.Volatile   
If sName = "" Then SheetNo = Application.Caller.Parent.Index Else SheetNo = Sheets(sName).Index   
End Function  
 
Всем спасибо большое
 
Цитата
Могу ошибаться, но это нерешаемо
Ошибался. Мое заблуждение из-за того, что в редакторе отображаются  исходные названия листов (ааа(Лист1), данные(Лист2)...), которые неизменны (но можно переименовать) и которые я принял за порядковые номера.
 
Цитата
Казанский: Если аргумент опущен или равен "", то, как и раньше, возвращается номер листа, из которого вызвана ф-я
Специально не стал такого делать - пусть лучше будет ошибка #ССЫЛКА!, чем циклическая ссылка ячейки на саму себя.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Такой вариант с макрофункцией в именованной формуле.
KL
 
KL расскажи пожалуйста поэтапно как ты сделал функцию (=ДВССЫЛ("'"&ИНДЕКС(Sheets;ПОИСКПОЗ(Sheet;Sheets;0)-1)&"'!A1")) в post_151506.xls. Я так понял  Sheet и Sheets это имена присвоенные каким та ячейка, только каким не пойму. Разясни пожалуйста.    
Заранее огромное спасибо.
 
Нажимаем в листе Ctrl+F3
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Блин не пойму как сделать тоже самое в другой книге подскажите кто знает.
 
А что не получается? Как я посмотрел - Вы прикрепили оригинальный файл KL. Или я упустил чего?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Да Вы правильно поняли это тот самый файл. Не могу разобраться как он работает. Мне надо тоже самое сделать в другой книге, а как не знаю. Если можно разъясните  поэтапно как он это сделал.
 
Поэтапно...Постараемся.  
Жмете Ctrl+F3. Создать. Создаете как в примере два имени:  
Sheet и Sheets. Для которых в поле диапазон пишите: =ПСТР(ЯЧЕЙКА("filename";!$A$1);НАЙТИ("[";ЯЧЕЙКА("filename";!$A$1));32) и =ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1+0*ТДАТА()) соответственно.
 
Затем в ячейку, в которой хотите получить результат вписываете:  
=ДВССЫЛ("'"&ИНДЕКС(Sheets;ПОИСКПОЗ(Sheet;Sheets;0)-1)&"'!A1")  
 
Вместо A1 адрес той ячейки, данные которой надо получить.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А в каких ячейках присваиваем эти имена?
 
Цитата
А в каких ячейках присваиваем эти имена?
Теперь я не понял. Я ж написал что указывать в качестве диапазона. Что теперь-то не получается? Не надо ни в каких ячейках ничего указывать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Извини просто я совсем тугой в этом. Создаю новую книгу нжимаю Ctrl+F3 добавляю два имени Sheet и Sheets. Для которых в поле диапазон пишиу: =ПСТР(ЯЧЕЙКА("filename";!$A$1);НАЙТИ("[";ЯЧЕЙКА("filename";!$A$1));32) и =ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1+0*ТДАТА()) соответственно. На листе 1 в ячейке А1 ставлю число перехожу на лист два в ячейку А1 вставляю формулу =ДВССЫЛ("'"&ИНДЕКС(Sheets;ПОИСКПОЗ(Sheet;Sheets;0)-1)&"'!A1") И получаю #Имя?
Что я делаю не так?
 
Надо посмотреть при создании имени область его действия. Должна быть Книга.  
А еще...Возможно надо заменить в формуле:    
=ПСТР(ЯЧЕЙКА("filename";!$A$1);НАЙТИ("[";ЯЧЕЙКА("filename";!$A$1));32)
 
"filename" на "имяфайла"
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Огромное спасибо. Все заработало.
Страницы: 1
Наверх