Формула ссылка на предыдущий лист excel

 

drondrx

Пользователь

Сообщений: 15
Регистрация: 01.01.1970

Есть книга со множеством листов нужно примерно так Лист 1, Лист2, Лист3  (Ячейка  Лист2!C1=Лист1!А1 если я меняю порядок листов Лист1, Лист3, Лист2, то ячейка  Лист2!С1  нужно чтобы ссылалось на Лист3!А1. т.е нужно чтобы ячейки ссылались на предыдущий лист автоматически при перемещение листов

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#2

02.09.2010 14:34:29

Простая функция, которая возвращает порядковый номер листа:    

Код
Function SheetNo()   
Application.Volatile   
SheetNo = Application.Caller.Parent.Index   
End Function   

 

А дальше ДВССЫЛ:  
=ДВССЫЛ(«Лист»&sheetno()-1&»!A1″)

 

drondrx

Пользователь

Сообщений: 15
Регистрация: 01.01.1970

а если названия листа меняются и не сотержат слово «Лист»

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#4

02.09.2010 14:47:45

Тогда еще одна простая функция, которая возвращает имя листа по номеру:    

Код
Function SheetName(iSheetNo As Long) As String   
SheetName = Sheets(iSheetNo).Name   
End Function 

 

И, соответственно,    
=ДВССЫЛ(sheetname(sheetno()-1)&»!A1″)

 

The_Prist

Пользователь

Сообщений: 14183
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#5

02.09.2010 14:48:42

Цитата
а если названия листа меняются и не сотержат слово «Лист»
Код
Function SheetName()   
Application.Volatile   
If Application.Caller.Parent.Index > 1 Then SheetName = Application.Caller.Parent.Previous.Name   
End Function  

   

И формула      
=ДВССЫЛ(«‘»&sheetname()&»‘!A1»)

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Как я понял — Листы А, Б, В. Переместили , допустим, Б —  А, В ,Б  
Формулы листа А ссылались на Б, теперь на В.  
Могу ошибаться, но это нерешаемо.

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#7

02.09.2010 15:05:17

Дописал функцию 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  
 

drondrx

Пользователь

Сообщений: 15
Регистрация: 01.01.1970

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#9

02.09.2010 15:31:18

Цитата
Могу ошибаться, но это нерешаемо

Ошибался. Мое заблуждение из-за того, что в редакторе отображаются  исходные названия листов (ааа(Лист1), данные(Лист2)…), которые неизменны (но можно переименовать) и которые я принял за порядковые номера.

 

The_Prist

Пользователь

Сообщений: 14183
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#10

02.09.2010 15:56:38

Цитата
Казанский: Если аргумент опущен или равен «», то, как и раньше, возвращается номер листа, из которого вызвана ф-я

Специально не стал такого делать — пусть лучше будет ошибка #ССЫЛКА!, чем циклическая ссылка ячейки на саму себя.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Такой вариант с макрофункцией в именованной формуле.

 

KL расскажи пожалуйста поэтапно как ты сделал функцию (=ДВССЫЛ(«‘»&ИНДЕКС(Sheets;ПОИСКПОЗ(Sheet;Sheets;0)-1)&»‘!A1»)) в post_151506.xls. Я так понял  Sheet и Sheets это имена присвоенные каким та ячейка, только каким не пойму. Разясни пожалуйста.    
Заранее огромное спасибо.

 

The_Prist

Пользователь

Сообщений: 14183
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Нажимаем в листе Ctrl+F3

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Блин не пойму как сделать тоже самое в другой книге подскажите кто знает.

 

The_Prist

Пользователь

Сообщений: 14183
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

А что не получается? Как я посмотрел — Вы прикрепили оригинальный файл KL. Или я упустил чего?

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Да Вы правильно поняли это тот самый файл. Не могу разобраться как он работает. Мне надо тоже самое сделать в другой книге, а как не знаю. Если можно разъясните  поэтапно как он это сделал.

 

The_Prist

Пользователь

Сообщений: 14183
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Поэтапно…Постараемся.  
Жмете Ctrl+F3. Создать. Создаете как в примере два имени:  
Sheet и Sheets. Для которых в поле диапазон пишите: =ПСТР(ЯЧЕЙКА(«filename»;!$A$1);НАЙТИ(«[«;ЯЧЕЙКА(«filename»;!$A$1));32) и =ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1+0*ТДАТА()) соответственно.

  Затем в ячейку, в которой хотите получить результат вписываете:  
=ДВССЫЛ(«‘»&ИНДЕКС(Sheets;ПОИСКПОЗ(Sheet;Sheets;0)-1)&»‘!A1»)  

  Вместо A1 адрес той ячейки, данные которой надо получить.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

А в каких ячейках присваиваем эти имена?

 

The_Prist

Пользователь

Сообщений: 14183
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#19

25.02.2011 16:16:58

Цитата
А в каких ячейках присваиваем эти имена?

Теперь я не понял. Я ж написал что указывать в качестве диапазона. Что теперь-то не получается? Не надо ни в каких ячейках ничего указывать.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Извини просто я совсем тугой в этом. Создаю новую книгу нжимаю Ctrl+F3 добавляю два имени Sheet и Sheets. Для которых в поле диапазон пишиу: =ПСТР(ЯЧЕЙКА(«filename»;!$A$1);НАЙТИ(«[«;ЯЧЕЙКА(«filename»;!$A$1));32) и =ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1+0*ТДАТА()) соответственно. На листе 1 в ячейке А1 ставлю число перехожу на лист два в ячейку А1 вставляю формулу =ДВССЫЛ(«‘»&ИНДЕКС(Sheets;ПОИСКПОЗ(Sheet;Sheets;0)-1)&»‘!A1») И получаю #Имя?
Что я делаю не так?

 

The_Prist

Пользователь

Сообщений: 14183
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Надо посмотреть при создании имени область его действия. Должна быть Книга.  
А еще…Возможно надо заменить в формуле:    
=ПСТР(ЯЧЕЙКА(«filename»;!$A$1);НАЙТИ(«[«;ЯЧЕЙКА(«filename»;!$A$1));32)

  «filename» на «имяфайла»

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Сергей

Гость

#22

25.02.2011 16:59:07

Огромное спасибо. Все заработало.

0 / 0 / 0

Регистрация: 11.08.2016

Сообщений: 4

1

Как в книге проставить формулу со ссылкой на предыдущий лист

11.08.2016, 15:00. Показов 14334. Ответов 10


Студворк — интернет-сервис помощи студентам

Здравствуйте! Нужна помощь. Есть книга, выбираю ячейку и хочу проставить формулу =’1′!G44:H45+E44, на каждый лист в определённую ячейку и главное со ссылкой на предыдущий лист. Т.е. вопрос: что надо сделать, чтобы во всю сразу книгу вставить формулу в которой есть ссылка на пред.лист? Спасибо



0



2640 / 1697 / 694

Регистрация: 04.09.2015

Сообщений: 3,367

11.08.2016, 15:45

2

0115432, Зачем вам такая формула в ячейке? Формула вернет значение ошибки.
Приложите файл с реальными названиями листов. В файле покажите что нужно сделать. Возможно найдется решение.



0



0 / 0 / 0

Регистрация: 11.08.2016

Сообщений: 4

11.08.2016, 16:38

 [ТС]

3

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



0



2640 / 1697 / 694

Регистрация: 04.09.2015

Сообщений: 3,367

11.08.2016, 17:47

4

Так надо?
PS. формулы типа

надо писать так

т.е. указывать верхнюю левую ячейку объединенной ячейки. Иначе возврачается не одно значение, а диапазон, типа {3;0:0;0}



0



0 / 0 / 0

Регистрация: 11.08.2016

Сообщений: 4

11.08.2016, 18:10

 [ТС]

5

да, хорошо, но особо волнует именно вами выделенная

Цитата
Сообщение от AlexM
Посмотреть сообщение

‘1’

, понимаете? на третьем листе она должна стать ‘2’, на четвертом ‘3’, на 198 надо ‘197’… как заменить то, что в этих кавычках на универсально понятное екселю =’

предыдущий лист

‘!G44+E44 ?



0



2640 / 1697 / 694

Регистрация: 04.09.2015

Сообщений: 3,367

11.08.2016, 18:15

6

Лучший ответ Сообщение было отмечено 0115432 как решение

Решение

Вы откройте файл и изучите формулы. Я ваши формулы с ссылкой на предыдущий лист заменил все. Имя предыдущего листа получаем формулой

Код

ПСТР(ЯЧЕЙКА("имяфайла";A1);ПОИСК("]";ЯЧЕЙКА("имяфайла";A1))+1;255)-1



2



0 / 0 / 0

Регистрация: 11.08.2016

Сообщений: 4

11.08.2016, 18:39

 [ТС]

7

прошу прощения! Спасибо вам огромное! работает! пойду изучать как вы это сделали



0



0 / 0 / 0

Регистрация: 27.08.2018

Сообщений: 10

06.11.2018, 18:21

8

Подскажите, а если название листов заданы не числами, а словами или вот названиями месяцев хотя бы (типа: «январь», «февраль» и т.д.), возможно ли тогда получить ссылку на предыдущий лист?



0



0 / 0 / 0

Регистрация: 08.04.2019

Сообщений: 2

08.04.2019, 07:55

9

Всем добра!

Господа профессионалы, нужна помощь профану)

Вопрос совершенно тот же, при копирровании листа нужно использовать в некоторых ячейках данные с предыдущего листа, в частности, необходимо в отчете во вложении прописать такую формулу в ячейках B2 и столбце С листа 7.04Н, чтобы брались данные соответственно B3 и столбца F листа и так продолжая при каждом добавлении листа.

Помогите пожалуйста с формулой…



0



2640 / 1697 / 694

Регистрация: 04.09.2015

Сообщений: 3,367

08.04.2019, 10:25

10

Goorito, если вам не подходит решение из этой темы, то ваша задача отличается от этой. Создайте свою тему.

Добавлено через 11 минут
А решение не подходит, потому что в вашей книге название листов текст, а в формула работает, когда название листов числа, причем листы названы по возрастанию чисел.



0



0 / 0 / 0

Регистрация: 08.04.2019

Сообщений: 2

11.04.2019, 06:55

11

ок спс



0



Ссылка на другой лист с помощью ДВССЫЛ

Задача: вам нужно получить значение ячейки B4 с одного из многих листов. При этом, определить, с какого именно листа вы можете на основании расчета. Может ли ДВССЫЛ ссылаться на другой лист?

Решение: ДВССЫЛ может ссылаться на другой лист. Но функция требует особого обращения, если имя листа содержит пробелы или дату. Если лист содержит пробел в имени, вы должны составить ссылку на лист, используя апострофы вокруг имени листа, затем восклицательный знак и адрес ячейки (см. также Сумма одной и той же ячейки на нескольких листах). Например, = ‘ Прибыли и убытки ‘ !В2. Если имя листа не содержит пробелы, вы можете обойтись без апострофов: =Доходы!В2. Если у вас смесь имен листов, некоторые из которых содержат пробелы, в формуле вы должны спланировать апострофы (рис. 1).

Рис. 1. ДВССЫЛ ссылается на переменный лист

Рис. 1. ДВССЫЛ ссылается на переменный лист

Скачать заметку в формате Word или pdf, примеры в формате Excel

Формула в ячейке F4: =ДВССЫЛ( » ‘ » &F$3& » ‘ ! » & » B4 » ). Первый частокол из апострофов – это открывающие кавычки » + апостроф ‘ + закрывающие кавычки » . Второй частокол – это открывающие кавычки » + два символа: апостроф и восклицательный знак ‘ ! + закрывающие кавычки » .

Проблема с формулами в четвертой строке в том, что они жестко ссылаются на В4, поэтому при копировании в строки с 5 по 7 они становятся не релевантными. Чтобы формулы могли ссылаться на данные из других строк, можно использовать функции ЯЧЕЙКА или АДРЕС. Вы можете приспособить функцию ЯЧЕЙКА в считанные секунды, но функция АДРЕС может, в конечном счете, оказаться более удобной, как только вы поймете нюансы ее использования.

Фрагмент формулы ЯЧЕЙКА( » адрес » ;$B5) возвращает текст $В$5, что удачно подходит для аргумента функции ДВССЫЛ (рис. 2). Знак доллара перед буквой В позаботится о том, чтобы формула на всех листах ссылалась на столбец В. Отсутствие знака доллара перед цифрой 5 позволит при копировании формулы вниз по столбцу ссылаться на строки 5, 6, 7… Формула в ячейке F5: =ДВССЫЛ( » ‘ » &F$3& » ‘ ! » &ЯЧЕЙКА( » адрес » ;$B5)).

Рис. 2. Добавление функции ЯЧЕЙКА позволяет скопировать формулу на всю таблицу

Рис. 2. Добавление функции ЯЧЕЙКА позволяет скопировать формулу на всю таблицу

Вы можете использовать функцию АДРЕС вместо функции ЯЧЕЙКА. В своей простейшей форме –АДРЕС(номер_строки; номер_столбца) – функция возвращает адрес ячейки. Например, =АДРЕС(5, 2) возвращает текст $В$5. Может показаться странным писать =АДРЕС(СТРОКА(),2) вместо более простого и короткого ЯЧЕЙКА( » адрес » ;$B5), когда вы хотите сослаться на столбец B в текущей строке. Однако, функция АДРЕС имеет три дополнительных необязательных аргумента.

Примечание: третий и четвертый аргументы функции АДРЕС в этой теме вас не интересуют, но вы должны разобраться с ними, чтобы добраться до пятого аргумента.

Третий аргумент определяет, тип ссылки, т.е., какие ссылку будут абсолютными, а какие относительными (подробнее см. Относительные, абсолютные и смешанные ссылки на ячейки в Excel). Вот простой способ запомнить, как работает этот аргумент. Число в аргументе соответствует тому, сколько раз вы нажмите клавишу F4, чтобы добиться комбинации знаков доллара:

  • АДРЕС(5;2;1) – фиксирует, как столбец, так и строку, и возвращает $B$5;
  • АДРЕС(5;2;1) – фиксирует только строку, и возвращает B$5;
  • АДРЕС(5;2;1) – фиксирует только столбец, и возвращает $B5;
  • АДРЕС(5;2;1) – оставляет обе ссылки относительными, и возвращает B5.

Четвертый аргумент определяет стиль ссылки:

  • АДРЕС(5;2;1;1) – возвращает ссылку в стиле А1 – $В$5;
  • АДРЕС(5;2;1;0) – возвращает ссылку в стиле R1C1 – R5C2.

Пятый аргумент определяет имя листа. Excel сам проанализирует синтаксис имени, и определит, нужны ли апострофы:

  • =АДРЕС(5;2;4;1; » Atlanta » ) вернет Atlanta!B5;
  • =АДРЕС(5;2;4;1; » Eden Prairie » ) вернет ‘ Eden Prairie ‘ !B5

Примечание: на самом деле вы не обязаны помнить, какие параметры нужны для третьего и четвертого аргументов функции АДРЕС. Просто пропустите их (рис. 3). Например, формула =АДРЕС(5;2;;; » Eden Prairie » ) вернет значение ‘ Eden Prairie ‘ !$B$5.

Рис. 3. Аргументы функции АДРЕС

Рис. 3. Аргументы функции АДРЕС

Функция АДРЕС с использованием пятого аргумента возвращает текст, который может быть использован в функции ДВССЫЛ (рис. 4). Формула в ячейке D6: =ДВССЫЛ(АДРЕС(СТРОКА();2;;;D$3)). Эта формула также может быть скопирована на всю таблицу. Первый аргумент в АДРЕС – СТРОКА() – гарантирует, что Excel извлекает значение из строки с тем же номером, что и формула. Второй аргумент фиксирован – это 2. Т.е., всегда получите столбец B. Третий и четвертый аргументы опущены, что говорит функции АДРЕС вернуть абсолютные ссылки в стиле А1. Пятый аргумент содержит знак доллара только перед строкой, что сохранит релевантность формулы при ее копировании вдоль столбца: при этом будет сохранятся ссылка на имя листа (из третьей строки). При копировании же вдоль строки ссылка будет меняется с переходом от столбца к столбцу (попробуйте в приложенном файле Excel).

Рис. 4. Альтернативный вариант с функцией АДРЕС

Рис. 4. Альтернативный вариант с функцией АДРЕС

Дополнительные сведения: функция ДВССЫЛ может работать и со ссылками в стиле R1C1. Часто это упрощает создание формул. До сих пор мы во всех примерах функция ДВССЫЛ использовала только первый аргумент (второй аргумент был опущен), например, ДВССЫЛ( » В4 » ). Эта формула вернет такое же значение при использовании в качестве второго аргумента значения ИСТИНА: ДВССЫЛ( » В4 » ; ИСТИНА). Последняя формула явно предписывает функции ДВССЫЛ использовать стиль ссылок А1. Значение ЛОЖЬ в качестве второго аргумента – ДВССЫЛ( » В4 » ; ЛОЖЬ) – предписывает интерпретировать ссылки в стиле R1C1.

Ссылка =RC указывает на текущую строку и текущий столбец. Числе после R или C создает абсолютную ссылку на определенную строку или столбец. Так, например, формула =RC2 ссылается на столбец B из того же ряда. Если вы используете ссылки в стиле R1C1, вам не понадобятся функции ЯЧЕЙКА или АДРЕС (рис. 5). Здесь в ячейке С7 формула =ДВССЫЛ( » ‘ » &C$3& » ‘ !RC2 » ;ЛОЖЬ). Эта формула также может быть скопирована по всей таблице. Обратите внимание, что вам не придется переключаться на использование на листе ссылок в стиле R1C1 для того, чтобы воспользоваться этой формулой.

Рис. 5. Стиль R1C1 не популярен, но он, безусловно, значительно облегчает написание формул

Рис. 5. Стиль R1C1 не популярен, но он, безусловно, значительно облегчает написание формул

Как в книге проставить формулу со ссылкой на предыдущий лист

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как создать новый лист в книге со ссылкой на предыдущий лист?
Добрый день. Есть реестр учета спецтехники. Его заполняет диспетчер каждый день. т.е. каждый день.

Как в ячейку вставить формулу со ссылкой на другой лист?
Есть таблица, вид таблицы представлен во вложении. Это уже результат работы макроса. Есть куча.

Как найти в книге формулу с недопустимыми ссылками
Добрый день! у меня выскакивает ошибка (см рис) функция «проверка наличия ошибок не.

Как в рабочей книге добавить лист и назвать его по своей фамилии
Нужен макрос. Суть такова: в рабочей книге добавить лист и назвать его по своей фамилии. На этот.

Вложения

шаблон 1.xlsx (63.6 Кб, 37 просмотров)

Вложения

шаблон 1.xls (98.0 Кб, 93 просмотров)

Сообщение от AlexM
Сообщение было отмечено 0115432 как решение

Решение

Господа профессионалы, нужна помощь профану)

Вопрос совершенно тот же, при копирровании листа нужно использовать в некоторых ячейках данные с предыдущего листа, в частности, необходимо в отчете во вложении прописать такую формулу в ячейках B2 и столбце С листа 7.04Н, чтобы брались данные соответственно B3 и столбца F листа и так продолжая при каждом добавлении листа.

Помогите пожалуйста с формулой.

Вложения

бар отчет.xlsx (23.4 Кб, 17 просмотров)

Goorito, если вам не подходит решение из этой темы, то ваша задача отличается от этой. Создайте свою тему.

Добавлено через 11 минут
А решение не подходит, потому что в вашей книге название листов текст, а в формула работает, когда название листов числа, причем листы названы по возрастанию чисел.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как закрыть паролем отдельный лист в защищенный книге Excel-2003
Есть защищеная книга в Excel-2003, состоящая из некоторого кол-ва отдлельных листов. Как сделать.

Вернуться на предыдущий лист
Здравстуйте ув. форумчане. произошел у меня затык в макросе. Мне нужно обратится к определенному.

Подскажтие, как объединить книги, чтобы формулы ссылались на лист в объединенной книге
Здравствуйте! Подскажите пожалуйста, как осуществить следующее. Была книга Kniga с листом.

Формирование ссылки макросом на предыдущий лист
Всем доброго времени суток. Есть файл с листами январь, февраль и т.д. Для примера необходимо на.

Ссылка на предыдущий лист.

ghost3085

Дата: Среда, 29.05.2013, 10:59 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
0% ±


Помогите мне в такой проблеме.
У меня документ в нем сейчас около 10 листов. Каждый лист ссылается на пару ячеек предыдущего.
Примет: Лист2 ссылается на ячейку В2 и С5 листа1, Лист3 ссылается на В2 и С5 листа2 и тд.
Имена листов не известны. Как ссылаться на предыдущий лист???

 

Ответить

Serge_007

Дата: Среда, 29.05.2013, 11:19 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Формулами — никак


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

ghost3085

Дата: Среда, 29.05.2013, 12:14 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
0% ±


Можно и макросом. Желательно обьяснить. Или готовый макрос пришлите если не тяжело, а я его подгоню.
Заранее благодарю.

 

Ответить

ghost3085

Дата: Среда, 29.05.2013, 14:08 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
0% ±


Я тут немного поклацал.
У меня 2 функции

Определяем имя листа
[vba]

Код

Function SheetName(iSheetNo As Long) As String
SheetName = Sheets(iSheetNo).Name
End Function

[/vba]

Определяем номер листа
[vba]

Код

Function SheetNo()
Application.Volatile
SheetNo = Application.Caller.Parent.Index
End Function

[/vba]

И, соответственно,

Код

=ДВССЫЛ(sheetname(sheetno()-1)&»!A1″)

В результате на чистом фале все работает, но когда переименовываю лист по типу 10-15,04 (с 10 по 15 апреля) в результате ЗНАЧ
Подскажите где копать????

[admin]Оформляйте коды тегами![/admin]

Сообщение отредактировал ghost3085Среда, 29.05.2013, 14:12

 

Ответить

AlexM

Дата: Среда, 29.05.2013, 14:11 |
Сообщение № 5

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Можно функцией пользователя.
Код поместить в Модуль1
[vba]

Код

Function PrevSheet(Cell As Range) As Variant
PrevSheet = Sheets(IIf(ActiveSheet.Index = 1, 1, ActiveSheet.Index — 1)).Range(Cell.Address)
End Function

[/vba]
Чтобы при изменении значений в ячейке, которая является аргументом функции, функция пересчитывалась надо к формуле добавить:
Если формула возвращает число +СЕГОДНЯ()*0, если формула возвращает текст &ЕСЛИ(СЕГОДНЯ()*0;;»»)
См.файл.

К сообщению приложен файл:

____.xls
(25.0 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

ghost3085

Дата: Четверг, 30.05.2013, 10:19 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
0% ±


Спасибо!!
Теперь вопрос как зделать автоматическое обновление данных при перемещение по ячейкам??
Данные не обновляться пока не обновлю ячейку с формулой.

 

Ответить

AlexM

Дата: Четверг, 30.05.2013, 11:27 |
Сообщение № 7

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

В модуль «Эта книга» вставить код
[vba]

Код

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sh.Calculate
End Sub

[/vba]



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

ghost3085

Дата: Четверг, 30.05.2013, 14:06 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
0% ±


Может я конечно что-то не так зделал, но у меня не срабатывает.
Нужно чтоб обновлялись значения в ячейках автоматом как при обычних вычислениях.
Изначально эта задача для человека который не очень знает компьютер, поэтому вручную обновлять ячейки не очень удобно…

Сообщение отредактировал ghost3085Четверг, 30.05.2013, 14:11

 

Ответить

Serge_007

Дата: Четверг, 30.05.2013, 14:14 |
Сообщение № 9

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Цитата (ghost3085)

обновлялись значения в ячейках автоматом как при обычних вычислениях

Цитата (ghost3085)

автоматическое обновление данных при перемещение по ячейкам?

Так как надо: при пересчёте листа или при перемещении по ячейкам?


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

ghost3085

Дата: Пятница, 31.05.2013, 10:49 |
Сообщение № 10

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
0% ±


Извиняюсь что не корректно выразился.
Нужно автоматическое обновление данных/ссылок (как при обычных формулах)
поменял значение в ячейке — формула пересчитала автоматом…

 

Ответить

Serge_007

Дата: Пятница, 31.05.2013, 10:59 |
Сообщение № 11

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Цитата (ghost3085)

поменял значение в ячейке — формула пересчитала автоматом

Цитата (AlexM)

Чтобы при изменении значений в ячейке, которая является аргументом функции, функция пересчитывалась надо к формуле добавить:
Если формула возвращает число +СЕГОДНЯ()*0, если формула возвращает текст &ЕСЛИ(СЕГОДНЯ()*0;;»»)
См.файл.


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

AlexM

Дата: Пятница, 31.05.2013, 11:14 |
Сообщение № 12

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Еще раз выкладываю файл. Ссылки автоматически обновляются.

К сообщению приложен файл:

0424769.xls
(26.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

ghost3085

Дата: Понедельник, 03.06.2013, 10:40 |
Сообщение № 13

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
0% ±


Извиняюсь еще раз!!!
Вот пример моей задачи.
Подскажите что делать с этой проблемой.
Ссылки ссылаются на первый лист (по умолчанию), происходит дублирование, если обновить тогда пересчитует. Где копать?????
также возникает цикличиская ссылка….
Добавил!!!

К сообщению приложен файл:

2044838.xls
(97.5 Kb)

Сообщение отредактировал ghost3085Понедельник, 03.06.2013, 11:45

 

Ответить

AlexM

Дата: Понедельник, 03.06.2013, 10:45 |
Сообщение № 14

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Решение было в сообщении №7
С циклической ссылкой не разобрался. Ошибка появляется только при сохранении файла.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

Сообщение отредактировал AlexMПонедельник, 03.06.2013, 12:34

 

Ответить

ghost3085

Дата: Понедельник, 03.06.2013, 14:26 |
Сообщение № 15

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
0% ±


Извиняюсь за мучения!!!!!
Большое спасибо. Все работает!!!!! Всем спасибо.

 

Ответить

Сергей

Дата: Пятница, 17.01.2014, 10:41 |
Сообщение № 16

Здраствуйте, у меня была такая же проблема, воспользовался вашим решением — работает, для работы циклической ссылки я включил итеративные вычисления, но при любых изменениях значения в ячейках со ссылкой «prevshit» сбиваются, и появляются несуществующие цифры, видимо это связано с тем, что циклическая может выдать неправильное значение, что она собственно и делает. как решить эту проблему? подскажите пожалуйста

 

Ответить

maeglah

Дата: Понедельник, 20.01.2014, 20:47 |
Сообщение № 17

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Бьюсь с той же проблемой, ИМХО циклические ссылки возникают при количестве листов с ссылками на предыдущий более 2 х.
Вот эта вот конструкция ActiveSheet.Index, дает нам индекс текущего листа.
При этом если мы откроем последний лист, который будет в данный момент как раз активным, для всех ячеек содержащих данную формул
он так же станет активным, формула замкнется на себя.
И этого может не случиться если листов будет всего два и первый из них будет содержать только стартовые данные.

Так что главный вопрос — как получить имя листа которому принадлежит вычисляемая ячейка для которой происходят вычисления не зависимо от активного в данный момент листа.

Сообщение отредактировал maeglahПонедельник, 20.01.2014, 20:48

 

Ответить

bygaga

Дата: Среда, 28.05.2014, 10:12 |
Сообщение № 18

Группа: Пользователи

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
0% ±


Excel 2003, 2007

Сообщение отредактировал bygagaСреда, 28.05.2014, 10:12

 

Ответить

acidlisk

Дата: Пятница, 19.09.2014, 10:18 |
Сообщение № 19

Группа: Пользователи

Ранг: Прохожий

Сообщений: 2


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

AlexM, а почему для пересчета функции надо добавлять +СЕГОДНЯ()*0 ?
Потому, что excel в любом случае будет считать функцию СЕГОДНЯ() и заодно все значение ячейки пересчитает, что ли? То есть по факту это костыль?

 

Ответить

Goorito

Дата: Четверг, 11.04.2019, 06:52 |
Сообщение № 20

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
20% ±


Excel 2016

Всем добра!

Господа профессионалы, нужна помощь профану)
Решил поднять эту тему.

Вопрос совершенно тот же, при копировании листа нужно использовать в некоторых ячейках данные с предыдущего листа, в частности, необходимо в отчете во вложении прописать такую формулу в ячейках B2 и столбце С листа 7.04Н, чтобы брались данные соответственно B3 и столбца F листа и так продолжая при каждом добавлении листа.

Помогите пожалуйста с формулой…

К сообщению приложен файл:

6300319.xlsx
(23.4 Kb)

Сообщение отредактировал GooritoЧетверг, 11.04.2019, 06:53

 

Ответить

Хитрости »

20 Август 2020              3468 просмотров


Имя предыдущего листа

Иногда возникают ситуации, когда необходимо знать имя листа(текущего или на котором ссылка) — об этом я уже писал в статье Как получить имя листа формулой. Но куда сложнее ситуация с получением имени предыдущего листа. Т.е. имя того листа, который расположен перед тем листом, на котором записана формула. Зачем это может потребоваться? Например, если в книге ведут учет касс и каждый лист это отдельная дата. И в определенной ячейке необходимо получить данные по остаткам из предыдущего листа(дня).
Стандартные формулы(та же ЯЧЕЙКА(CELL)) могут это сделать, но в силу специфики получается так, что они бесполезны. В той же ЯЧЕЙКА для получения имени конкретного листа необходимо указать ссылку на ячейку на этом самом листе. Замкнутый круг. Ведь можно сразу указать эту ссылку. А если лист со ссылкой будет удален, то получим ошибку и ссылку надо будет перепрописывать заново.
А значит обычные формулы нам в автоматизации не помогут — такое возможно только через VBA. Лучше всего делать это при помощи функции пользователя(UDF). И главное, эта функция не так уж и сложна:

'---------------------------------------------------------------------------------------
' Author : Щербаков Дмитрий(The_Prist)
'          https://www.excel-vba.ru
'          info@excel-vba.ru
' Purpose: Функция возвращает имя листа, расположенного перед листом с функцией
'          Не требует аргументов
'          Если функция записана на первом по порядку листе - функция вернет ПУСТО
'---------------------------------------------------------------------------------------
Function GetPrevSheet_Name()
    'заставляем пересчитывать формулу при любом изменении
    Application.Volatile True
    Dim ws As Worksheet
    'получаем ссылку на лист, в котором записана формула
    Set ws = Application.Caller.Parent
    'если лист с формулой 2-ой или более по порядку
    If ws.Index > 1 Then
        'получаем имя предыдущего листа
        GetPrevSheet_Name = ws.Previous.Name
    Else
        GetPrevSheet_Name = vbNullString
    End If
End Function

Чтобы правильно использовать приведенный код, необходимо сначала ознакомиться со статьей Что такое функция пользователя(UDF)?. Вкратце: скопировать текст кода выше, перейти в редактор VBA(Alt+F11) -создать стандартный модуль(InsertModule) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций(Shift+F3), отыскав её в категории Определенные пользователем (User Defined Functions).
Синтаксис записи функции на лист:
=GetPrevSheet_Name()
Функция будет исправно работать даже если предыдущий лист будет удален — ведь она непосредственно на него никак на завязана.
Однако, сама по себе функция в таком виде не очень практична — она ничего не дает, кроме имени листа. Чтобы получить с её помощью значение конкретной ячейки предыдущего листа(пусть это будет ячейка «А1»), необходимо использовать функцию преобразования текстового представления адреса в реальный — ДВССЫЛ(INDIRECT):
=ДВССЫЛ(«‘»&GetPrevSheet_Name()&»‘!A1»)
=INDIRECT(«‘»&GetPrevSheet_Name()&»‘!A1»)
Формула не очень наглядна, хоть и не сложна. Самое непонятное здесь, наверное, это апострофы. Я добавил их до и после имени листа на тот случай, если в имени листа будут различные знаки препинания и другие «неугодные» именам листов символы(пробел в том числе). В этом случае апострофы обязательны, но они никак не мешают, если никаких символов нет.
Но даже в связке с ДВССЫЛ(INDIRECT) наиболее часто функция будет использоваться для получения значения одной конкретной ячейки(как в примере выше). И куда реже в составе каких-либо других функций(ИНДЕКС, ВПР и т.п.), требующих указания диапазонов. Поэтому было бы неправильно, если бы я не привел в статье функцию, которая сразу делает именно нужное — возвращает значение указанной ячейки из предыдущего листа:

'---------------------------------------------------------------------------------------
' Author : Щербаков Дмитрий(The_Prist)
'          https://www.excel-vba.ru
'          info@excel-vba.ru
' Purpose: Функция возвращает значение указанной ячейки на предыдущем листе
'          Если функция записана на первом по порядку листе - функция вернет ошибку ЗНАЧ!
'          Аргументы:
'              rc - ссылка на ячейку на текущем листе,
'                   по адресу которой необходимо получить значение из предыдущего листа
'---------------------------------------------------------------------------------------
Function GetPrevSheet_Value(Optional rc As Range)
    'заставляем пересчитывать формулу при любом изменении
    Application.Volatile True
    Dim rCell As Range
    If rc Is Nothing Then
        Set rCell = Application.Caller
    Else
        Set rCell = rc
    End If
    Dim ws As Worksheet
    'получаем ссылку на лист, в котором записана формула
    Set ws = Application.Caller.Parent
    'если лист с формулой 2-ой или более по порядку
    If ws.Index > 1 Then
        'получаем значение из предыдущего листа
        'на основании адреса указанной ячейки
        GetPrevSheet_Value = ws.Previous.Range(rCell.Address).Value
    Else
        GetPrevSheet_Value = CVErr(xlErrValue)
    End If
End Function

Используется функция так же, как и предыдущая.
Синтаксис записи на листе для получения значения ячейки А1 из предыдущего листа:
=GetPrevSheet_Value(A1)
Если надо получить из предыдущего листа значение ячейки, адрес которой равен адресу ячейки, в которую введена сама функция:
=GetPrevSheet_Value()
Если функция записана на первом по порядку листе, то результатом будет значение ошибки #ЗНАЧ!(#VALUE!)


Значение из предыдущего листа нужно получать куда чаще, чем из следующего. Но раз есть одно — нужно и другое. Функции ниже получают имя и значение ячейки следующего листа:

'---------------------------------------------------------------------------------------
' Author : Щербаков Дмитрий(The_Prist)
'          https://www.excel-vba.ru
'          info@excel-vba.ru
' Purpose: Функция возвращает имя листа, расположенного после листа с функцией
'          Не требует аргументов
'          Если функция записана на первом по порядку листе - функция вернет ПУСТО
'---------------------------------------------------------------------------------------
Function GetNextSheet_Name()
    'заставляем пересчитывать формулу при любом изменении
    Application.Volatile True
    Dim ws As Worksheet
    'получаем ссылку на лист, в котором записана формула
    Set ws = Application.Caller.Parent
    'если лист с формулой не последний
    If ws.Index < ws.Parent.Worksheets.Count Then
        'получаем имя предыдущего листа
        GetNextSheet_Name = ws.Next.Name
    Else
        GetNextSheet_Name = vbNullString
    End If
End Function
'---------------------------------------------------------------------------------------
' Author : Щербаков Дмитрий(The_Prist)
'          https://www.excel-vba.ru
'          info@excel-vba.ru
' Purpose: Функция возвращает значение указанной ячейки на предыдущем листе
'          Если функция записана на первом по порядку листе - функция вернет ошибку ЗНАЧ!
'          Аргументы:
'              rc - ссылка на ячейку на текущем листе,
'                   по адресу которой необходимо получить значение из предыдущего листа
'---------------------------------------------------------------------------------------
Function GetNextSheet_Value(Optional rc As Range)
    'заставляем пересчитывать формулу при любом изменении
    Application.Volatile True
    Dim rCell As Range
    If rc Is Nothing Then
        Set rCell = Application.Caller
    Else
        Set rCell = rc
    End If
    Dim ws As Worksheet
    'получаем ссылку на лист, в котором записана формула
    Set ws = Application.Caller.Parent
    'если лист с формулой не последний
    If ws.Index < ws.Parent.Worksheets.Count Then
        'получаем значение из предыдущего листа
        'на основании адреса указанной ячейки
        GetNextSheet_Value = ws.Next.Range(rCell.Address).Value
    Else
        GetNextSheet_Value = CVErr(xlErrValue)
    End If
End Function

Скачать файл пример:

  Имя предыдущего листа.xls (85,5 KiB, 514 скачиваний)

Так же см.:
Как получить имя листа формулой


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Понравилась статья? Поделить с друзьями:
  • Формула создать список в excel
  • Формула создания ссылки на ячейку в excel
  • Формула содержит нераспознанный текст excel как исправить
  • Формула содержание ячейки excel
  • Формула совпадения значений excel