Важно помнить о возможностях изменения относительной ссылки на ячейку при переходе или копировании формулы.
-
Перемещение формулы При этом ссылки на ячейки в формуле не изменяются независимо от типа ссылки на ячейку.
-
Копирование формулы: При копировании формулы изменяются относительные ссылки на ячейки.
Перемещение формулы
-
Выделите ячейку с формулой, которую необходимо переместить.
-
В группе Буфер обмена на вкладке Главная нажмите кнопку Вырезать.
Формулы можно скопировать и путем перетаскивания границы выделенной ячейки в левую верхнюю ячейку области вставки. При этом будут заменяться все существующие данные.
-
Выполните одно из указанных ниже действий.
-
Чтобы вировать формулу иформатирование: в группе Буфер обмена на вкладке Главная нажмите кнопку В виде вкладки.
-
Чтобы вировать только формулу:в группе Буфер обмена на вкладке Главная нажмите кнопку В paste(Главная), выберите специальная ветвь ищелкните Формулы.
-
Копирование формулы
-
Вы выберите ячейку, содержащую формулу, которую нужно скопировать.
-
В группе Буфер обмена на вкладке Главная нажмите кнопку Копировать.
-
Выполните одно из указанных ниже действий.
-
Чтобы вировать формулу и любое форматирование, в группе Буфер обмена на вкладке Главная нажмите кнопку В виде вкладки.
-
Чтобы вировать только формулу, в группе Буфер обмена на вкладке Главная нажмите кнопку Вировать ,выберите специальная ветвь ,а затем щелкните Формулы.
Примечание: В нее можно вклеить только результаты формулы. В группе Буфер обмена на вкладке Главная нажмите кнопку Вировать, выберите специальная ветвь ,а затем щелкните Значения.
-
-
Убедитесь, что ссылки на ячейки в формуле дают нужный результат. При необходимости переключить тип ссылки можно следующим образом:
-
-
Выделите ячейку с формулой.
-
В строке формул строка формул
выделите ссылку, которую нужно изменить.
-
Для переключения между сочетаниями нажмите F4.
В таблице подводится информация об обновлении типа ссылки при копировании формулы, содержащей ссылку, на две ячейки вниз и на две ячейки вправо.
-
Копируемая формула |
Первоначальная ссылка |
Новая ссылка |
---|---|---|
|
$A$1 (абсолютный столбец и абсолютная строка) |
$A$1 |
A$1 (относительный столбец и абсолютная строка) |
C$1 |
|
$A1 (абсолютный столбец и относительная строка) |
$A3 |
|
A1 (относительный столбец и относительная строка) |
C3 |
Примечание: Формулы также можно копировать в смежные ячейки с помощью маркер заполнения . После проверки на то, что ссылки на ячейки в формуле дают нужный результат в шаге 4, вы выберите ячейку со скопированной формулой и перетащите его по диапазону, который вы хотите заполнить.
Перемещение формул очень похоже на перемещение данных в ячейках. Единственное, что нужно знать, — ссылки на ячейки, используемые в формуле, остаются нужными после перемещения.
-
Вы выберите ячейку с формулой, которую вы хотите переместить.
-
Щелкните Главная > вырезать (или нажмите CTRL+X).
-
Выйдите из ячейки, в которая должна вться формула, и нажмите кнопку Вировать (или нажмите CTRL+V).
-
Убедитесь, что ссылки на ячейки остаются нужными.
Совет: Вы также можете щелкнуть ячейки правой кнопкой мыши, чтобы вырезать и врезать формулу.
Копирование формул без сдвига ссылок
Проблема
Предположим, что у нас есть вот такая несложная таблица, в которой подсчитываются суммы по каждому месяцу в двух городах, а затем итог переводится в евро по курсу из желтой ячейки J2.
Проблема в том, что если скопировать диапазон D2:D8 с формулами куда-нибудь в другое место на лист, то Microsoft Excel автоматически скорректирует ссылки в этих формулах, сдвинув их на новое место и перестав считать:
Задача: скопировать диапазон с формулами так, чтобы формулы не изменились и остались теми же самыми, сохранив результаты расчета.
Способ 1. Абсолютные ссылки
Как можно заметить по предыдущей картинке, Excel сдвигает только относительные ссылки. Абсолютная (со знаками $) ссылка на желтую ячейку $J$2 не сместилась. Поэтому для точного копирования формул можно временно перевести все ссылки во всех формулах в абсолютные. Нужно будет выделить каждую формулу в строке формул и нажать клавишу F4:
При большом количестве ячеек этот вариант, понятное дело, отпадает — слишком трудоемко.
Способ 2. Временная деактивация формул
Чтобы формулы при копировании не менялись, надо (временно) сделать так, чтобы Excel перестал их рассматривать как формулы. Это можно сделать, заменив на время копирования знак «равно» (=) на любой другой символ, не встречающийся обычно в формулах, например на «решетку» (#) или на пару амперсандов (&&). Для этого:
- Выделяем диапазон с формулами (в нашем примере D2:D8)
- Жмем Ctrl+H на клавиатуре или на вкладке Главная — Найти и выделить — Заменить (Home — Find&Select — Replace)
- В появившемся диалоговом окне вводим что ищем и на что заменяем и в Параметрах (Options) не забываем уточнить Область поиска — Формулы. Жмем Заменить все (Replace all).
- Копируем получившийся диапазон с деактивированными формулами в нужное место:
- Заменяем # на = обратно с помощью того же окна, возвращая функциональность формулам.
Способ 3. Копирование через Блокнот
Этот способ существенно быстрее и проще.
Нажмите сочетание клавиш Ctrl+Ё или кнопку Показать формулы на вкладке Формулы (Formulas — Show formulas), чтобы включить режим проверки формул — в ячейках вместо результатов начнут отображаться формулы, по которым они посчитаны:
Скопируйте наш диапазон D2:D8 и вставьте его в стандартный Блокнот:
Теперь выделите все вставленное (Ctrl+A), скопируйте в буфер еще раз (Ctrl+C) и вставьте на лист в нужное вам место:
Осталось только отжать кнопку Показать формулы (Show Formulas), чтобы вернуть Excel в обычный режим.
Примечание: этот способ иногда дает сбой на сложных таблицах с объединенными ячейками, но в подавляющем большинстве случаев — работает отлично.
Способ 4. Макрос
Если подобное копирование формул без сдвига ссылок вам приходится делать часто, то имеет смысл использовать для этого макрос. Нажмите сочетание клавиш Alt+F11 или кнопку Visual Basic на вкладке Разработчик (Developer), вставьте новый модуль через меню Insert — Module и скопируйте туда текст вот такого макроса:
Sub Copy_Formulas() Dim copyRange As Range, pasteRange As Range On Error Resume Next Set copyRange = Application.InputBox("Выделите ячейки с формулами, которые надо скопировать.", _ "Точное копирование формул", Default:=Selection.Address, Type:=8) If copyRange Is Nothing Then Exit Sub Set pasteRange = Application.InputBox("Теперь выделите диапазон вставки." & vbCrLf & vbCrLf & _ "Диапазон должен быть равен по размеру исходному " & vbCrLf & _ "диапазону копируемых ячеек.", "Точное копирование формул", _ Default:=Selection.Address, Type:=8) If pasteRange.Cells.Count <> copyRange.Cells.Count Then MsgBox "Диапазоны копирования и вставки разного размера!", vbExclamation, "Ошибка копирования" Exit Sub End If If pasteRange Is Nothing Then Exit Sub Else pasteRange.Formula = copyRange.Formula End If End Sub
Для запуска макроса можно воспользоваться кнопкой Макросы на вкладке Разработчик (Developer — Macros) или сочетанием клавиш Alt+F8. После запуска макрос попросит вас выделить диапазон с исходными формулами и диапазон вставки и произведет точное копирование формул автоматически:
Ссылки по теме
- Удобный просмотр формул и результатов одновременно
- Зачем нужен стиль ссылок R1C1 в формулах Excel
- Как быстро найти все ячейки с формулами
- Инструмент для точного копирования формул из надстройки PLEX
копирование формул без связи |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Скопировать лист с формулами из одной книги в другую
Автор ATS, 08.08.2008, 10:00
« назад — далее »
Возникла проблема. Вроде должно быть простое решение, но никак не могу его найти..
Есть книга с неким набором листов и формул в них. Есть лист СВОД, где по формулам, с использованием данных из других листов этой книги вычисляются итоговые цифры. Есть другая книга с идентичным набором листов и формул в них, только с разными исходными данными. Нужно скопировать в нее лист СВОД из первой книги со всеми формулами так, чтобы в этом листе вычислялись значения по данным из второй книги. Проблема в том, что при копировании листа, все формулы ссылаются на первую книгу. Можно было бы конечно все ссылки в формулах на первую книгу один раз исправить вручную, но если книг, куда нужно скопировать данный лист СВОД сотни, это становится настоящей проблемой..
Формулы в листе свод надо менять.
Один раз поменять и на всегда все будет работать так, как вам нужно.
Для этого нужно использовать функцию ДВССЫЛ(), и еще иногда функцию ИНДЕКС.
ДВССЫЛ() должна заменить все ссылки в формулах на листе СВОД, тогда при копировании в др. книгу формулы будут тянуть данные из листов новой книги.
Подробнее с примером.
А
Правка — Специальная вставка — Формулы
пробовали?
(Добавлено.)
Попробовал сам. Ёксель добавляет ссылку на исходную книгу и в этом случае.
Цитата: Василий Алибабаевич от 08.08.2008, 10:18
Формулы в листе свод надо менять.
Один раз поменять и на всегда все будет работать так, как вам нужно.
Для этого нужно использовать функцию и еще иногда функцию ИНДЕКС.
ДВССЫЛ() должна заменить все ссылки в формулах на листе СВОД, тогда при копировании в др. книгу формулы будут тянуть данные из листов новой книги.Подробнее с примером.
Не совсем понятно как применить функцию.
В первой книге на листе СВОД есть множество формул вида =’Кальк’!P76, данные для вычисления которых берутся, в данном случае, соответственно из листа КАЛЬК той же книги. При копировании листа СВОД в другую книгу с аналогичными листами, получаем формулу ='[Экономическая часть по т.э.на 2009г со сводом.xls]Кальк’!P76, т.е. ссылку на первую книгу. Прошу на данном примере объяснить как нужно изменить первоначальную формулу, используя функцию ДВССЫЛ().
Менять все формулы — занятие для мазохиста. Да и быстродействие сильно пострадает.
Раз уж ёксель сверх меры услужлив, скопируем формулы сами.
Sub ATS()
Const WS_NAME = "Лист1"
Const DST_NAME = "Книга2"
Dim c As Range
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
With Worksheets(WS_NAME)
.Copy Before:=Workbooks(DST_NAME).Sheets(1)
For Each c In .UsedRange.SpecialCells(xlCellTypeFormulas).Cells
Cells(c.Row, c.Column).Formula = c.Formula
Next
End With
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
Если в исходной книге структура листов (имена листов) не совпадают с новой книгой, то в любом случае часть работы надо будет руками делать
А если совпадает — то почему нельзя автоматизировать изменение всех связей в новой книге.
или я чего-й-то недопонял…
Цитата: ДмиДми от 11.08.2008, 10:01
Менять все формулы — занятие для мазохиста. Да и быстродействие сильно пострадает.
Раз уж ёксель сверх меры услужлив, скопируем формулы сами.Sub ATS()
Const WS_NAME = "Лист1"
Const DST_NAME = "Книга2"
Dim c As RangeWith Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
With Worksheets(WS_NAME)
.Copy Before:=Workbooks(DST_NAME).Sheets(1)
For Each c In .UsedRange.SpecialCells(xlCellTypeFormulas).Cells
Cells(c.Row, c.Column).Formula = c.Formula
Next
End With
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
Вобщем-то работает. Осталось решить как применить этот макрос к любой книге, не вписывая постоянно вручную имя файла в константу DST_NAME
Цитата: Василий Алибабаевич от 11.08.2008, 10:14
Если в исходной книге структура листов (имена листов) не совпадают с новой книгой, то в любом случае часть работы надо будет руками делать
А если совпадает — то почему нельзя автоматизировать изменение всех связей в новой книге.или я чего-й-то недопонял…
Это как, автоматизировать изменение всех связей в новой книге? Структура совпадает.
Это наверное не ко мне, но я с близкой проблемой обращался и мне помогли — мне нужно было автоматизировать удаление всех связей.
Думаю, что можно написать макрос, который бы все связи перекидывал на активную книгу.
Цитата: Василий Алибабаевич от 12.08.2008, 13:24
Это наверное не ко мне, но я с близкой проблемой обращался и мне помогли — мне нужно было автоматизировать удаление всех связей.
Думаю, что можно написать макрос, который бы все связи перекидывал на активную книгу.
Как в макросе обратиться к активной книге?
ATS,
не заглянуть ли Вам в
Первые шаги
?
P.S. Не знаю, лучшее ли это руководство, — просто не знаю в сети других адресованных начинающим.
Час мучений и вот он, итоговый вариант, кому интересно :
Sub ATS()
Const WS_NAME = «СВОД»
Dim c As Range
Dim filename As String
iOpen = Application.Dialogs(xlDialogOpen).Show
filename = ActiveWindow.Caption
If iOpen <> True Then
MsgBox «Вы не выбрали книгу», , «»
End If
Windows(«Экономическая часть по т.э.на 2009г со сводом.xls»).Activate
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
With Worksheets(WS_NAME)
.Copy Before:=Workbooks(filename).Sheets(1)
For Each c In .UsedRange.SpecialCells(xlCellTypeFormulas).Cells
Cells(c.Row, c.Column).Formula = c.Formula
Next
End With
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
Неожиданно при копировании формул из книги в книгу (Правка — Специальная вставка — Формулы) обнаружил способ избавиться от связи с книгой-оригиналом.
Правка — Связи… — кнопка Изменить, и привязываем к самой книге-копии. Связи исчезают.
вот оно, то самое простое решение
Пожалуйста, подскажи где найти искомое в Эксель 2007 ! Там введь нет меню Правка-Связи. Заранее спасибо
Хоть и походит на некропостинг, но вдруг кому-то пригодится.
В Excel 2007: данные — в подключениях «изменить связи» — изменить — и выбираете новую книгу.
- Профессиональные приемы работы в Microsoft Excel
-
►
Обмен опытом -
►
Microsoft Excel -
►
Скопировать лист с формулами из одной книги в другую
Простота этого вопроса на самом деле обманчива. Есть сразу несколько способов скопировать формулу в Excel, но есть и подводные камни, которые могут внести путаницу в ваши расчеты. По традиции, делюсь опытом внутри статьи.
Рассмотрим на примерах популярные методы копирования формул, их плюсы и минусы.
Если вам необходимо ссылаться на одну ячейку и она не должна перемещаться при копировании формул (чтобы адреса ячеек не менялись), прочитайте статью про абсолютные и относительные ссылки.
У нас есть список объектов, с определенными показателями по каждому. Нужно присвоить статус формулой в отдельном столбце.
Содержание
- Самый популярный способ копировать. Автозаполнение
- Как скопировать формулу в Excel? Перетаскиванием или растаскиванием
- Копирование формулы простой вставкой и специальной вставкой
- Копирование формул из другой книги
- Как скопировать формулы, как текст
- Похожие статьи
Самый популярный способ копировать. Автозаполнение
Запишем формулу в ячейку C2. Описание функции ЕСЛИ можно прочитать здесь.
Понятно, что для каждого филиала писать отдельную формулу мы не будем. Как быстро продлить формулу?
Если навести на границу ячейки в правый нижний угол, появится крест. Если сделать двойной щелчок, то формулы автоматически заполнятся до конца диапазона (до строки 12). Подробнее об этом читаем здесь.
Очень удобно!
Важное замечание. Такой способ работает только если в соседнем столбце, слева или справа, данные не прерываются. Т.е. если в строке 9 не будет данных, то диапазон заполнится только до 8 строки. Если у вас огромная таблица, нужно быть аккуратным и проверять автозаполнение!
Как скопировать формулу в Excel? Перетаскиванием или растаскиванием
Когда появился крестик (см. предыдущий пункт), вы можете потащить за него в любую сторону — формула будет копироваться. Применять это удобно, если вам не нужно копировать формулу до конца диапазона, а только на несколько ячеек или вбок.
Еще один интересный способ — так называемый, метод перетаскивания данных. Если вам нужно скопировать формулы из одной ячейки в другую — выделите ячейку, зажмите клавишу Ctrl — наведите на границу выделенной ячейки курсор (появиться маленький крестик) и зажмите левую кнопку мыши — теперь потяните в любую сторону, до нужной вам ячейки. Данные скопируются! Если в ячейке были формулы — они перенесутся.
Копирование формулы простой вставкой и специальной вставкой
Конечно, никто не отменял копирование данных стандартными способами:
- Выбрали данные — Правой кнопкой мыши — Копировать. Выбрали место для копирования — Правой кнопкой мыши — Вставить
- Выбрали данные — Ctrl + C. Выбрали место для копирования — Ctrl + V.
Но при таком копировании переносится и оформление ячеек — цвет заливки, шрифт и т.д. Если вам нужно перенести в другую ячейку только формулу, воспользуйтесь специальной вставкой.
Выделите данные Копировать — Выделите место куда копировать — кликаем правой кнопкой мыши — в открывшемся меню выбираем Специальная вставка — в окне ставим галочку «формулы» (показано на рисунке в начале статьи).
Копирование формул из другой книги
Нужно быть внимательным при копировании формул из другой книги, ведь при таком копировании в формулу добавляется и имя книги, на которую вы ссылаетесь.
В данном случае Копирование формул.xlsx — название файла, квадратные скобки отделяют его от других частей ссылки. Чтобы удалить имя файла из формулы (т.е. сделать формулы только для этой книги), воспользуйтесь возможностью Найти и Заменить. Обращаю внимание, что заменять нужно именно фразу [Копирование формул.xlsx]
Не забудьте также поменять название листа, если это необходимо.
Как скопировать формулы, как текст
Есть один интересный способ, как скопировать формулу в Excel как текст. Замените = в формулах на другой символ, например на /, формулы превратятся в обычный текст. Опять же это можно сделать инструментом Найти и Заменить.
Получится вот так:
Теперь данные из столбца C можно скопировать в любую книгу или лист, после чего заменить / обратно на =. Формулы перенесены!
Кстати, чтобы посмотреть формулы записанные в ячейках, есть специальная функция — просмотр формул. Зайдите в меню Формулы на ленте инструментов — раздел Зависимости формул — кнопка Показать формулы.
Есть вопрос — напишите комментарий!