Всем доброго дня!
Excel 2007
Есть необходимость программно скопировать формулу из верхней ячейки в следующую пустую одного и того же столбца.
Событие происходит не в модуле, а на листе (Private Sub Worksheet_Change(ByVal Target As Range))
Что делаю:
1. Объявляю переменные
Dim a
Dim b
2. Нахожу последнюю пустую строку
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
3. Выбираю со смещением нужную мне ячейку, где уже есть формула.
Cells(LastRow — 0, 6).Select
4. Загоняю формулу в переменную а
a = Cells(LastRow — 0, 6).Formula
Если посмотреть «а», то моя формула там сохранена в виде строки типа «=бла бла бла»
5. Выбираю следующую вниз пустую ячейку, чтоб скопировать формулу из переменной «а»
ActiveCell.Offset(1, 0).Select
И тут загвоздка.
Метод copy paste не работает, ошибка Object required
Назначение переменной «а» в качестве as Range почему-то не работает или я туплю (начал хорошо отмечать праздник…)
Вопрос: как скопировать формулу?
Содержание
- Как скопировать формулу/формулы в Excel, копирование и вставка формул
- Что такое формула?
- Ссылки в формулах
- Относительные ссылки на ячейки
- Абсолютные ссылки на ячейки
- Смешанные ссылки на ячейки
- Трехмерные ссылки на ячейки
- Как создать формулу и ввести ее в ячейку?
- Простые формулы
- Формулы с использованием относительных ссылок
- Формулы с использованием абсолютных ссылок
- Как ввести одну формулу одновременно в несколько ячеек?
- Как выделить все ячейки с формулами?
- Как скопировать формулу из одной ячейки в другую?
- Как заменить формулу результатом ее вычисления?
- Как ускорить работу с формулами при создании и редактировании таблиц?
- Копирование формул без сдвига ссылок
- Проблема
- Способ 1. Абсолютные ссылки
- Способ 2. Временная деактивация формул
- Способ 3. Копирование через Блокнот
- Способ 4. Макрос
- Vba excel скопировать только формулы
Как скопировать формулу/формулы в Excel, копирование и вставка формул
Работа с формулами является неотъемлемой частью создания и редактирования таблиц в Excel. При этом создаются как простые, так и вложенные формулы, содержащие относительные, абсолютные и смешанные ссылки на ячейки. При внесении формул в таблицы, наиболее распространенными операциями являются копирование и вставка формул.
Что такое формула?
Формулы — это некоторые выражения, выполняющие вычисления между операндами при помощи операторов. Формулам всегда предшествует знак равенства, за которым следуют операнды и операторы.
Операнды — это элементы вычисления (ссылки, функции и константы ).
Ссылки — это адреса ячеек или их диапазонов.
Функции — это заранее созданные формулы, выполняющие сложные вычисления с введенными значениями (аргументами) в определенном порядке. Различают математические, статистические, текстовы, логические и другие категории функций.
Константы — это постоянные значения, как текстовые, так и числовые.
Операторы — это знаки или символы, определяющие тип вычисления в формуле над операндами. Используются математические, текстовые, операторы сравнения и операторы ссылок.
Ссылки в формулах
Для создания связей между ячейками используются ссылки. Различают три типа ссылок — относительные, абсолютные и смешанные. По умолчанию в Excel используются относительные ссылки.
Относительные ссылки на ячейки
Относительная ссылка — это ссылка, которая основана на относительном расположении ячейки, содержащей формулу и ячейки, на которую указывает ссылка. Если изменяется позиция ячейки с формулой, то автоматически корректируется и ссылка на связанную ячейку.
Абсолютные ссылки на ячейки
Абсолютная ссылка — это неизменяемая ссылка на ячейку, то есть при изменении позиции ячейки с формулой адрес ячейки с абсолютной ссылкой остается неизменным. Абсолютная ссылка указывается символом $ перед именем (номером) столбца и перед номером строки, например $A$1.
Смешанные ссылки на ячейки
Смешанная ссылка — это комбинация относительных и абсолютных ссылок, когда используется либо абсолютная ссылка на столбец и относительная на строку, либо абсолютная на строку и относительная на столбец, например $A1 или A$1. При изменении позиции ячейки с формулой, содержащей смешанные ссылки, относительная часть ссылки изменяется, а абсолютная остается неизменной.
Трехмерные ссылки на ячейки
Трехмерные ссылки — это ссылки на одну и ту же ячейку или даипазон ячеек, расположенных на нескольких листах одной книги. Трехмерная ссылка кроме имени столбца и номера строки включает в себя имя листа и имеет следующий вид Лист1:Лист3!А1.
Как создать формулу и ввести ее в ячейку?
Формулу можно вводить как непосредственно в ячейку, так и в окно ввода на строке формул. В ячейке с формулой отображается результат вычисления, а в окне ввода строки формул отображается текст формулы.
Простые формулы
Простая формула — это формула, содержащая только числовые константы и операторы.
Для того чтобы создать простую формулу, необходимо:
— выделить ячейку, в которой будет находиться формула;
— ввести с клавиатуры символ равно (=);
— ввести число, затем знак действия, затем следующее число и так далее (например =2+3*4);
— нажать Enter для перехода вниз, Shift+Enter для перехода вверх, Tab для перехода вправо или Shift+Tab для перехода влево.
Формулы с использованием относительных ссылок
Этот вид формул основан на вычислениях, использующих ссылки на ячейки. Для того чтобы создать такую формулу, необходимо:
— выделить ячейку, в которой будет находиться формула;
— ввести символ равенства (=) с клавиатуры;
— ввести адрес ячейки, содержащей нужное значение (можно кликнуть курсором мыши по нужной ячейке);
— вставить в формулу оператор, ввести адрес следующей ячейки и так далее;
— завершить создание формулы аналогично тому, как это описано в предыдущем случае.
Формулы с использованием абсолютных ссылок
Формулы с использованием абсолютных ссылок создаются с небольшим отличием от формул использующим относительные ссылки. Для создания формулы этого типа необходимо:
— выделить ячейку, в которой будет находится формула;
— ввести символ равенства (=) с клавиатуры;
— создать нужную формулу с использованием относительных ссылок на ячейки;
— не закрепляя созданную формулу, кликнуть курсором ввода текста в адресном окошке перед адресом той ячейки, которую необходимо сделать абсолютной ссылкой;
— нажать на клавиатуре F4;
— завершить создание формулы клавишей Enter.
Как ввести одну формулу одновременно в несколько ячеек?
Для ввода одной формулы в диапазон ячеек необходимо:
— выделить диапазон ячеек;
— ввести формулу в первую ячейку диапазона;
— закрепить результат сочетанием клавиш Ctrl+Enter.
Как выделить все ячейки с формулами?
В версиях приложения Excel 2007 и выше существует возможность выделять группы ячеек, объединенные общим признаком, например можно найти и выделить все ячейки, содержащие формулы. Для этого на вкладке «Главная» нужно раскрыть меню кнопки «Найти и выделить» и выбрать пункт «Формулы» в списке команд.
Как скопировать формулу из одной ячейки в другую?
При копировании формулы из одной ячейки в другую все ссылки, которые используются в формуле, автоматически корректируются и заменяются в соответствии с новым положением формулы.
Скопировать формулу из выбранной ячейки можно любым известным способом (при помощи кнопки «Копировать» на вкладке «Главная», при помощи сочетания горячих клавиш Ctrl+C, при помощи пункта «Копировать» в контекстном меню и так далее). После того как формула скопирована, необходимо выделить ячейку, в которую нужно вставить формулу и использовать любой известный способ вставки (кнопкой «Вставить» на вкладке «Главная», сочетанием горячих клавиш Ctrl+V, выбрав пункт «Вставить» из контекстного меню, выбрав пункт «Специальная вставка»). После этого закрепить результат кликом по клавише Enter. Для копирования формулы можно использовать также способ, при котором курсор мыши наводится на правый нижний угол маркера выделения до появления тонкого черного крестика и при нажатой левой кнопке мыши протягивается по всему диапазону. При этом в каждой следующей ячейке формула будет иметь ссылки на новые соответствующие ячейки.
Если нужно скопировать формулу так, чтобы ссылки на адреса ячеек остались неизменными, то необходимо либо относительные ссылки превратить в абсолютные, либо скопировать текст формулы в строке ввода формул.
Как заменить формулу результатом ее вычисления?
Если скопировать ячейку или диапазон ячеек с формулами, а вставку осуществить при помощи пункта «Вставить значения» (вкладка «Главная»/группа «Буфер обмена»/кнопка «Вставить», либо контекстное меню «Специальная вставка»/»Значения»), то в результате этой операции вместо формул будут отображены значения, полученные в результате вычисления этих формул. Если скопировать диапазон ячеек с формулами и в этот же диапазон вставить значения, то формулы этого диапазона будут заменены результатами их вычислений.
Как ускорить работу с формулами при создании и редактировании таблиц?
Копировать формулы в таблицах стандартными средствами Excel приятно и легко до тех пор, пока формулы несложные, однотипные и расположены в непрерывных диапазонах ячеек. На практике же часто встречаются такие таблицы, где информация сгруппирована по различным видам, типам, группам, срокам, наименованиям и так далее. Соответственно и формулы в таких таблицах расположены не подряд, а с различными промежутками и редактировать такие таблицы (например добавлять новые столбцы или строки) довольно проблематично из-за большого количества повторения одной и той же операции копирования-вставки. Еще более усугубляется такая ситуация тем, что формулы сложные и со смешанными ссылками. Копирование и вставка таких формул зачастую приводит к нежелательным смещениям адресов ячеек и их диапазонов, копировать же текст формул не вполне удобно.
Облегчает и ускоряет работу при копировании формул, текста формул и значений формул, а также при замене формул их значениями VBA-надстройка для Excel, позволяющая в указанном диапазоне копировать все ячейки с формулами и вставлять в соседние ячейки с заданным смещением как формулы и тексты формул, так и значения. Диалоговое окно надстройки и ссылка для скачивания представлены ниже.
Надстройка позволяет:
1. Одним кликом мыши вызывать диалоговое окно макроса прямо из панели инструментов Excel;
2. в выбранном диапазоне находить ячейки с формулами, копировать их и вставлять с заданным смещением;
3. выбирать один из трех режимов копирования формул:
— «Скопировать формулы» — простое копирование формул, при котором все ссылки, используемые в формулах, автоматически изменяются в соответствии с новым размещением формул;
— «Скопировать текст формул» — точное копирование формул, без изменения ссылок, используемых в формулах;
— «Скопировать значения формул» — копирование, при котором формулы заменяется результатамм их вычислений.
4. заменять формулы выбранного диапазона результатами вычисления (если выбрать опцию «Скопировать значения формул», а в полях, где задается смещение установить нули).
Источник
Копирование формул без сдвига ссылок
Проблема
Предположим, что у нас есть вот такая несложная таблица, в которой подсчитываются суммы по каждому месяцу в двух городах, а затем итог переводится в евро по курсу из желтой ячейки J2.
Проблема в том, что если скопировать диапазон D2:D8 с формулами куда-нибудь в другое место на лист, то Microsoft Excel автоматически скорректирует ссылки в этих формулах, сдвинув их на новое место и перестав считать:
Задача: скопировать диапазон с формулами так, чтобы формулы не изменились и остались теми же самыми, сохранив результаты расчета.
Способ 1. Абсолютные ссылки
Способ 2. Временная деактивация формул
Чтобы формулы при копировании не менялись, надо (временно) сделать так, чтобы Excel перестал их рассматривать как формулы. Это можно сделать, заменив на время копирования знак «равно» (=) на любой другой символ, не встречающийся обычно в формулах, например на «решетку» (#) или на пару амперсандов (&&). Для этого:
- Выделяем диапазон с формулами (в нашем примере D2:D8)
- Жмем Ctrl+H на клавиатуре или на вкладке Главная — Найти и выделить — Заменить (Home — Find&Select — Replace)
Способ 3. Копирование через Блокнот
Этот способ существенно быстрее и проще.
Нажмите сочетание клавиш Ctrl+Ё или кнопку Показать формулы на вкладке Формулы (Formulas — Show formulas) , чтобы включить режим проверки формул — в ячейках вместо результатов начнут отображаться формулы, по которым они посчитаны:
Скопируйте наш диапазон D2:D8 и вставьте его в стандартный Блокнот:
Теперь выделите все вставленное (Ctrl+A), скопируйте в буфер еще раз (Ctrl+C) и вставьте на лист в нужное вам место:
Осталось только отжать кнопку Показать формулы (Show Formulas) , чтобы вернуть Excel в обычный режим.
Примечание: этот способ иногда дает сбой на сложных таблицах с объединенными ячейками, но в подавляющем большинстве случаев — работает отлично.
Способ 4. Макрос
Если подобное копирование формул без сдвига ссылок вам приходится делать часто, то имеет смысл использовать для этого макрос. Нажмите сочетание клавиш Alt+F11 или кнопку Visual Basic на вкладке Разработчик (Developer) , вставьте новый модуль через меню Insert — Module и скопируйте туда текст вот такого макроса:
Для запуска макроса можно воспользоваться кнопкой Макросы на вкладке Разработчик (Developer — Macros) или сочетанием клавиш Alt+F8. После запуска макрос попросит вас выделить диапазон с исходными формулами и диапазон вставки и произведет точное копирование формул автоматически:
Источник
Vba excel скопировать только формулы
= Мир MS Excel/Перенос формул в макрос — Мир MS Excel
Войти через uID
Войти через uID
Модератор форума: _Boroda_, китин
Мир MS Excel » Вопросы и решения » Готовые решения » Перенос формул в макрос (Excel)
Перенос формул в макрос
anisimovaleksandr32 | Дата: Понедельник, 25.01.2021, 12:44 | Сообщение № 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
I have an existing VBA code that copies an Excel worksheet from my source workbook (Sourcewb
) into a new destination workbook (Destwb
) but pastes values only. I need a specific range (D31:E38
) in the Destwb
to include the formulas from the source workbook. I found this code:
Range("A1:I1105").Copy Sheets("Sheet2").Range("B2")
On this site (another question) that seems related but don’t know how to modify it to work in my application. I have added a comment line » ‘Insert total formulas in Calc sheet» for where I think the additional code would go. Here is my existing code:
Set Sourcewb = ActiveWorkbook
'Copy the sheet to a new workbook
Sheets("Calculation").Copy
Set Destwb = ActiveWorkbook
'Determine the Excel version and file extension/format
With Destwb
If Val(Application.Version) < 12 Then
'You use Excel 97-2003
FileExtStr = ".xls": FileFormatNum = -4143
Else
'You use Excel 2007-2013
FileExtStr = ".xlsx": FileFormatNum = 51
End If
End With
'Change all cells in the worksheet to values if you want
With Destwb.Sheets(1).UsedRange
Application.CutCopyMode = False
ActiveSheet.Unprotect
.Cells.Copy
.Cells.PasteSpecial xlPasteValues
.Cells(1).Select
End With
Application.CutCopyMode = False
'Insert total formulas in Calc sheet
'Save the new workbook and close it
TempFilePath = Sheets("Calculation").Range("L4").Value
TempFileName = Range("L3").Value
With Destwb
.SaveAs TempFilePath & "" & TempFileName & FileExtStr, FileFormat:=FileFormatNum
.Close SaveChanges:=True
End With
MsgBox "You can find the new file in " & TempFilePath
shA.t
16.4k5 gold badges53 silver badges111 bronze badges
asked May 12, 2015 at 15:08
1
You could copy the whole thing first, like you are doing and then overwrite the cells in Destwb
D31:E38
with the formulas from the cells in Sourcewb
. Assuming the range of interest in Sourcewb
is «D31:E38
» and that the destination range and source range are the same size, you could do the following:
'Copy all cells
'Your code here
'New code
set formulaRngFromSource = Sourcewb.Sheets("Calculation").Range("D31:E38")
set formulaRngToDest = Destwb.Sheets(1).Range("D31:E38")
i = 1
for each range in formulaRngFromSource
formulaRngToDest(i).Formula = range.Formula
i = i + 1
next range
shA.t
16.4k5 gold badges53 silver badges111 bronze badges
answered May 12, 2015 at 15:28
deasadeasa
60610 silver badges24 bronze badges
0
You can try with: ActiveSheet.PasteSpecial Paste:=xlFormulas
ActiveSheet.Unprotect
...
.Cells.Copy
.Cells.PasteSpecial xlPasteValues
.Cells.PasteSpecial xlFormulas
.Cells(1).Select
End With
shA.t
16.4k5 gold badges53 silver badges111 bronze badges
answered May 12, 2015 at 15:21
JavyskJavysk
3512 silver badges16 bronze badges
Группа: Пользователи Ранг: Новичок Сообщений: 45
Замечаний: |
Здравствуйте, может мой вопрос уже изъезжен, но не могу найти решение.
Необходимо скопировать формулу из ячейки одного документа в ячейку другого документа.
Опишу кратко, код там большой но все упирается в следующий отрезок.
Допустим в ячейке есть формула A1+B1
[vba]
Код
Set WS1 = Workbooks.Item(«Договоры1.xlsm»).Sheets(«Договоры»)
Set WS2 = Workbooks.Item(«Договоры2.xlsm»).Sheets(«Договоры»)
WS1.Cells(1, 2).Copy: WS2.Cells(1, 2).PasteSpecial xlPasteValues ‘Копирую значения
WS1.Cells(1, 2).Copy: WS2.Cells(1, 2).PasteSpecial xlPasteFormulas ‘Копирую формулы
[/vba]
В итоге в файл «Договоры2» копируется ячейка, а формула в ней ссылается на ячейки файла «Договоры1»
с результатом ‘C:…Договоры1′!A1+C:…Договоры1’!B1
Как быть? нужно чтобы получилось A1+B1
Я так понимаю можно какой то приписать параметр может быть?
Вопрос:
[Последний вывод] Я обнаружил, что value(11)
может иногда копировать формулы, но не всегда. Формулы типа sumproduct
и sumif
не могут быть скопированы, но простые арифметические операции могут быть скопированы. Это так странно! Я до сих пор не могу понять, почему.
Я знаю, что если я хочу только копировать значения, самый быстрый способ –
Range("A1").Value = Range("A2").Value
Если я хочу скопировать форматирование и значения, самый быстрый способ –
Range("A1").Value(11) = Range("A2").Value(11)
Если я хочу скопировать формулы, самый быстрый способ –
Range("A1").Formula = Range("A2").Formula
Что делать, если я хочу скопировать формулу и форматирование? (У меня много форматирования в этой ячейке, как условное форматирование, полужирное, подчеркивание, выравнивание, формат отображения номера, стиль границы и т.д., Поэтому нецелесообразно передавать каждый из стилей по одному.)
Лучший ответ:
Я просто нашел простой ответ.
Range("A1").Value(11) = Range("A2").Value(11)
Range("A1").Formula = Range("A2").Formula
Так как value(11)
терпит неудачу при копировании некоторых сложных формул (я не знаю, почему, должно быть, ошибка в Excel), я добавил вторую строку, чтобы снова вставить формулу. Это должно гарантировать правильность копирования всех формул.
Ответ №1
Как о суб подобном:
Sub copyFormattingAndFormulas(source As Range, target As Range)
Dim sourceCell, targetCell As Range
Dim i, j, lastRow, lastColumn As Integer
lastRow = source.rows.count + source.row - 1
lastColumn = source.columns.count + source.Column - 1
For i = source.row To lastRow
For j = source.Column To lastColumn
Set sourceCell = Cells(source.row + i - 1, source.Column + j - 1)
Set targetCell = Cells(target.row + i - 1, target.Column + j - 1)
targetCell.value(11) = sourceCell.value(11)
targetCell = sourceCell.Formula
Next
Next
End Sub
Все, что он делает, – это то, что вы показали в вопросе (полезно знать о .value(11)!) в цикле для заданного диапазона.
Ответ №2
Чтобы скопировать формулы с форматированием в исходном диапазоне и сохранить относительные формулы (например, как с помощью Ctr-C и Ctr-V), используйте этот метод копирования и вставки:
Range("A1").Copy Range("A2")
Владимир_Сар 58 / 57 / 13 Регистрация: 10.09.2009 Сообщений: 255 |
||||||||
1 |
||||||||
Подскажите, как копировать формулы с ячеек листа екселя на другой лист20.10.2009, 15:34. Показов 8081. Ответов 4 Метки нет (Все метки)
Пробовал по разному
копирует значение, но не формулу, потом попробовал по стандарту
Если слишком много ячеек копировать противно мерцает экран
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
20.10.2009, 15:34 |
4 |
EducatedFool 0 / 0 / 0 Регистрация: 28.09.2009 Сообщений: 88 |
||||
20.10.2009, 16:30 |
2 |
|||
0 |
58 / 57 / 13 Регистрация: 10.09.2009 Сообщений: 255 |
|
20.10.2009, 16:40 [ТС] |
3 |
Спасибо, правда долго копирует
0 |
Toxa33rus 3895 / 898 / 122 Регистрация: 16.04.2009 Сообщений: 1,824 |
||||
20.10.2009, 16:43 |
4 |
|||
Может так попробовать:
1 |
58 / 57 / 13 Регистрация: 10.09.2009 Сообщений: 255 |
|
20.10.2009, 16:48 [ТС] |
5 |
Спасибо этот вариант гораздо быстрее
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
20.10.2009, 16:48 |
5 |