Excel макрос вставки формул

 

Добрый день! Скажите можно ли скопировать формулу макросом в активную ячейку
чтобы она соответствовала строке? Например:

=F12*E12*(1+NDS)*(1-DISCOUNT3M) (формула находиться допустим на листе1 в ячейке «A1» ;)
нужно скопировать её в активную ячейку на другом листе допустим в ячейку «G19» Лист2 чтоб получилось:
=F19*E19*(1+NDS)*(1-DISCOUNT3M)

Либо сразу вставлять формулу из макроса.

 

Nic70y

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

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

Win7 MSO 2013

#2

27.07.2013 21:56:04

Какое-то не соответствие :|

Код
     ActiveCell.FormulaR1C1 = "=RC6*RC5*(1+NDS)*(1-DISCOUNT3M)"
 

Юрий М

Модератор

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

Контакты см. в профиле

В который раз…))) Если уж макрос — зачем формула? Вычисляйте прямо в коде и вставляйте уже значение.

 

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

 

Юрий М

Модератор

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

Контакты см. в профиле

#5

27.07.2013 23:45:19

Цитата
Александр.М пишет:
которая и будет уже выполнять свои действия.

… и вернёт значение )) Как хотите…

 

ikki

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

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

три раза перечитал.
так и не понял.
что за «соответствие»?
формула была «допустим в A1», ссылалась на ячейки из 12-й строки и на какие-то имена.
«допустим», скопировалась.
«допустим», в G19.
другого листа.
умгу…

что надо сделать с формулой, чтобы её искорёжить требуемым образом?
с какого перепугу исчезла имеющаяся разница в 11 строк и 4(5) столбцов?
и где у нас уверенность, что эти имена будут работать на другом листе?
имена вообще-то разные бывают — в том числе и имена уровня листов, именованные формулы, динамические диапазоны, да мало ли что ещё…

может, начнём с начала, а не с середины?
какую задачу решаем?

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Ну просто значение останется значением в ячейке, а формула будет работать на листе, что собственно и требуется.

 

Nic70y

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

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

Win7 MSO 2013

Александр.М, я думал Вы просто ошиблись в строках, но ikki уточнил, а Вы ему так и не ответили.

 

vikttur

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

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

Т.е. если при изменении исходных данных для формулы макрос вместо этой формулы вставит значение в ячейку, то это плохо?

 

Что касается задачи: есть основная таблица, считает склад, представляет из себя большой список позиций и формул. Работает в скрытом режиме, все действия осуществляются с другого листа макросами и только мышью.
Пользуются программой несколько сотрудников, это максимально просто и не требует особых навыков.
Но иногда в таблицу необходимо внести новую позицию, что влечет за собой целый ряд действий, выполнение которых сотруднику занимающемуся иными вопросами не под силу. Задача, сделать так чтобы каждый сотрудник мог добавлять новые позиции легко и не принужденно.

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

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

В двух словах, надо макрасом в определенном месте таблицы создать новую строку и правильно заполнить
необходимые ячейки, так вот с ячейками в которых должна быть формула у меня и не выходит, не знаю
как вставить формулу с листа (формы) так чтобы она работала именно на той строке в которую её вставили.

 

ikki

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

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

#11

28.07.2013 02:21:53

спасибо за пояснения.
надеюсь, это не было столь уж сложно.

правда, намного легче не стало.
ок, оставим вопрос о том, зачем вообще в справочнике нужны именно формулы.
верю, что нужны.

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

Код
cells(i,7).formular1c1="=rc5*rc6*(1+NDS)*(1-DISCOUNT3M)"

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

ikki

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

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

гм…
как неожиданно обнаружилось только что, Николай писал то же самое ещё в посте #2.
чем не понравилось?

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

формулы в таблице =F12*E12*(1+NDS)*(1-DISCOUNT3M)
макрос ставит =$F16*$E16*(1+NDS)*(1-DISCOUNT3M)

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

Еще проще, вот выделил я ячейку E2, выполнить макрос, макос вставил формулу в Е2: =B2+C2/D2
выделил я ячейку Е9, выполнить макрос, макос вставил формулу в Е9: =B9+C9/D9
тоесть в зависимости от номера строки
вот как то так возможно? причем макрос один и тот же.

 

Юрий М

Модератор

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

Контакты см. в профиле

#14

28.07.2013 03:04:15

Цитата
Александр.М пишет:
вот выделил я ячейку E2, выполнить макрос, макос вставил формулу в Е2:=B2+C2/D2
выделил я ячейку Е9, выполнить макрос, макос вставил формулу в Е9:=B9+C9/D9
тоесть в зависимости от номера строки

Вот без формул: выделяйте ячейки в жёлтом диапазоне.

Прикрепленные файлы

  • Без формул.xls (22.5 КБ)

 

vikttur

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

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

Нужно еще на изменение влияющих ячеек.

 

Юрий М

Модератор

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

Контакты см. в профиле

Я просто показать, что можно и без формул выполнять требуемые вычисления)) А на влияющие — событие Change — согласен. Но автору всё равно нужны формулы))

 

marussia

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

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

Коллеги! Подскажите, где ошибка…
Вставляю формулу в макрос. Ругается: expected end of statement
Worksheets(«ST»).Cells(25, 5).Value = «=ТЕКСТ(Kolvo1;»00») & «:» & ТЕКСТ(Kolvo2;»00″)»

где Kolvo1 и Kolvo2 — переменные с цифровым значением
Спасибо.

 

JayBhagavan

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

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

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#18

16.09.2015 12:22:05

marussia, замените .Value на .FormulaLocal

ПС Не заметил двойные кавычки в формуле. Внутри строки двойные кавычки надо задваивать.

ПС2 Был не внимателен. Наверное так:

Код
Worksheets("ST").Cells(25, 5).FormulaLocal = "=ТЕКСТ(" & Kolvo1 & ";""00"") & "":"" & ТЕКСТ(" & Kolvo2 & ";""00"")"

Изменено: JayBhagavan16.09.2015 12:25:24

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

Вставка формулы со ссылками в стиле A1 и R1C1 в ячейку (диапазон) из кода VBA Excel. Свойства Range.FormulaLocal и Range.FormulaR1C1Local.

Свойство Range.FormulaLocal

FormulaLocal — это свойство объекта Range, которое возвращает или задает формулу на языке пользователя, используя ссылки в стиле A1.

В качестве примера будем использовать диапазон A1:E10, заполненный числами, которые необходимо сложить построчно и результат отобразить в столбце F:

Примеры вставки формул суммирования в ячейку F1:

Range(«F1»).FormulaLocal = «=СУММ(A1:E1)»

Range(«F1»).FormulaLocal = «=СУММ(A1;B1;C1;D1;E1)»

Пример вставки формул суммирования со ссылками в стиле A1 в диапазон F1:F10:

Sub Primer1()

Dim i As Byte

    For i = 1 To 10

        Range(«F» & i).FormulaLocal = «=СУММ(A» & i & «:E» & i & «)»

    Next

End Sub

В этой статье я не рассматриваю свойство Range.Formula, но если вы решите его применить для вставки формулы в ячейку, используйте англоязычные функции, а в качестве разделителей аргументов — запятые (,) вместо точек с запятой (;):

Range(«F1»).Formula = «=SUM(A1,B1,C1,D1,E1)»

После вставки формула автоматически преобразуется в локальную (на языке пользователя).

Свойство Range.FormulaR1C1Local

FormulaR1C1Local — это свойство объекта Range, которое возвращает или задает формулу на языке пользователя, используя ссылки в стиле R1C1.

Формулы со ссылками в стиле R1C1 можно вставлять в ячейки рабочей книги Excel, в которой по умолчанию установлены ссылки в стиле A1. Вставленные ссылки в стиле R1C1 будут автоматически преобразованы в ссылки в стиле A1.

Примеры вставки формул суммирования со ссылками в стиле R1C1 в ячейку F1 (для той же таблицы):

‘Абсолютные ссылки в стиле R1C1:

Range(«F1»).FormulaR1C1Local = «=СУММ(R1C1:R1C5)»

Range(«F1»).FormulaR1C1Local = «=СУММ(R1C1;R1C2;R1C3;R1C4;R1C5)»

‘Ссылки в стиле R1C1, абсолютные по столбцам и относительные по строкам:

Range(«F1»).FormulaR1C1Local = «=СУММ(RC1:RC5)»

Range(«F1»).FormulaR1C1Local = «=СУММ(RC1;RC2;RC3;RC4;RC5)»

‘Относительные ссылки в стиле R1C1:

Range(«F1»).FormulaR1C1Local = «=СУММ(RC[-5]:RC[-1])»

Range(«F2»).FormulaR1C1Local = «=СУММ(RC[-5];RC[-4];RC[-3];RC[-2];RC[-1])»

Пример вставки формул суммирования со ссылками в стиле R1C1 в диапазон F1:F10:

‘Ссылки в стиле R1C1, абсолютные по столбцам и относительные по строкам:

Range(«F1:F10»).FormulaR1C1Local = «=СУММ(RC1:RC5)»

‘Относительные ссылки в стиле R1C1:

Range(«F1:F10»).FormulaR1C1Local = «=СУММ(RC[-5]:RC[-1])»

Так как формулы с относительными ссылками и относительными по строкам ссылками в стиле R1C1 для всех ячеек столбца F одинаковы, их можно вставить сразу, без использования цикла, во весь диапазон.


На чтение 4 мин. Просмотров 33.1k.

Итог: ознакомьтесь с 3 советами по написанию и созданию формул в макросах VBA с помощью этой статьи и видео.

Уровень мастерства: Средний

Автоматизировать написание формул

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

Поначалу написание формул в VBA может быть немного сложнее,
поэтому вот три совета, которые помогут сэкономить время и упростить процесс.

Совет № 1: Свойство Formula

Свойство Formula является членом объекта Range в VBA. Мы можем использовать его для установки / создания формулы для отдельной ячейки или диапазона ячеек.

Есть несколько требований к значению формулы, которые мы устанавливаем с помощью свойства Formula:

  1. Формула представляет собой строку текста, заключенную в кавычки. Значение формулы должно начинаться и заканчиваться кавычками.
  2. Строка формулы должна начинаться со знака равенства = после первой кавычки.

Вот простой пример формулы в макросе.

Sub Formula_Property()

  ' Формула представляет собой строку текста, заключенную в кавычки
  ' Начинается со знака =
  Range("B10").Formula = "=SUM(B4:B9)"

End Sub

Свойство Formula также можно использовать для чтения существующей формулы в ячейке.

Совет № 2: Используйте Macro Recorder

Если ваши формулы более сложные или содержат специальные
символы, их будет сложнее написать в VBA. К счастью, мы можем использовать
рекордер макросов, чтобы создать код для нас.

Create Formula VBA code with the Macro Recorder

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

  1. Включите средство записи макросов (вкладка «Разработчик»> «Запись макроса»)
  2. Введите формулу или отредактируйте существующую формулу.
  3. Нажмите Enter, чтобы ввести формулу.
  4. Код создается в макросе.

Если ваша формула содержит кавычки или символы амперсанда, макрос записи будет учитывать это. Он создает все подстроки и правильно упаковывает все в кавычки. Вот пример.

Sub Macro10()
' Используйте средство записи макросов для создания кода для сложных формул с
' специальны символы и относительные ссылки

  ActiveCell.FormulaR1C1 = "=""Total Sales: "" & TEXT(R[-5]C,""$#,###"")"
    
End Sub

Совет № 3: Нотация формулы стиля R1C1

Если вы используете средство записи макросов для формул, вы
заметите, что он создает код со свойством FormulaR1C1.

Нотация стиля R1C1 позволяет нам создавать как относительные (A1), абсолютные ($A$1), так и смешанные ($A1, A$1) ссылки в нашем макрокоде.

R1C1 обозначает строки и столбцы.

Относительные ссылки

Для относительных ссылок мы указываем количество строк и
столбцов, которые мы хотим сместить от ячейки, в которой находится формула.
Количество строк и столбцов указывается в квадратных скобках.

Следующее создаст ссылку на ячейку, которая на 3 строки выше
и на 2 строки справа от ячейки, содержащей формулу.

Отрицательные числа идут вверх по строкам и столбцам слева.

Положительные числа идут вниз по строкам и столбцам справа.

Абсолютные ссылки

Мы также можем использовать нотацию R1C1 для абсолютных ссылок. Обычно это выглядит как $A$2.

Для абсолютных ссылок мы НЕ используем квадратные скобки. Следующее создаст прямую ссылку на ячейку $A$2, строка 2, столбец 1

При создании смешанных ссылок относительный номер строки или
столбца будет зависеть от того, в какой ячейке находится формула.

Проще всего использовать макро-рекордер, чтобы понять это.

Свойство FormulaR1C1 и свойство формулы

Свойство FormulaR1C1 считывает нотацию R1C1 и создает
правильные ссылки в ячейках. Если вы используете обычное свойство Formula с
нотацией R1C1, то VBA попытается вставить эти буквы в формулу, что, вероятно,
приведет к ошибке формулы.

Поэтому используйте свойство Formula, если ваш код содержит
ссылки на ячейки ($ A $ 1), свойство FormulaR1C1, когда вам нужны относительные
ссылки, которые применяются к нескольким ячейкам или зависят от того, где
введена формула.

Если ваша электронная таблица изменяется в зависимости от
условий вне вашего контроля, таких как новые столбцы или строки данных,
импортируемые из источника данных, то относительные ссылки и нотация стиля
R1C1, вероятно, будут наилучшими.

Я надеюсь, что эти советы помогут. Пожалуйста, оставьте
комментарий ниже с вопросами или предложениями.

Содержание

  1. Excel vba вставить в ячейку формулу
  2. Вставить формулу на лист средствами VBA
  3. Excel 2007: записать формулу в ячейку
  4. Вставка формулы в ячейку (Макросы/Sub)
  5. Вставка формулы в ячейку через макрос
  6. Макрос, вставляющий формулу в ячейку
  7. Копирование формул без сдвига ссылок
  8. Проблема
  9. Способ 1. Абсолютные ссылки
  10. Способ 2. Временная деактивация формул
  11. Способ 3. Копирование через Блокнот
  12. Способ 4. Макрос

Excel vba вставить в ячейку формулу

Вставить формулу на лист средствами VBA

​Смотрите также​​ .Range(«A2»).Formula = «=B1+B2″​А вот можно​ ‘здесь ошибка, поэтому​
​ функции идут через​ мне надо складывать​ объединенных ячеек в​ 11).Select Cells(NextRow, 11).FormulaLocal​ вставки.​
​ поклон​ людям что -​Вариант с FormulaR1C1​ именно завязка на​тогда так:​ — начать запись​
​ формула?​ на переменные.. ну​андрей тетерин​ End With End​ ли сразу вставить​
​ «=» перед «КОРРЕЛ»​ запятую, при этом​ разорванные диапазоны, так​ шапке​ = . и далее​
​Я делал раньше​LightZ, ikki,​ нужно писать макросы?​ — у меня​ относительность строки.​.Cells(ActiveCell.Row, 4).FormulaR1C1Local =​ макроса, выделить ячейку​андрей тетерин​
​ или я не​
​: Добрый день, уважаемые​
​ Subтак? проверьте пожалуйста.​ формулу в ячейку,​ заменил на «@»​ при вставке в​ что замена на​Igor_Tr​ нужна формула считающая​ так​отдельное спасибо​ Они будут ими​
​ работает нормально, нужно​а так, как​ «=ЕСЛИ(ЕОШИБКА(ВПР(RC2,Данные!C1:C2,2,ЛОЖЬ)),»»»»,ВПР(RC2,Данные!C1:C2,2,ЛОЖЬ))» ‘для столбца​ с формулой, нажать​: поверьте — нужны!​ знаю.. второй день​ гуру! Прошу вашей​Ципихович Эндрю​

​ чтобы обойтись без​​ Cells(i, j +​ ячейку формула автоматом​ двоеточие не подходит.​

​: Если без обьединения​​ среднее значение.​Range(Cells(60,41).select ActiveCell.FormulaR1C1 =​The_Prist,​ ПОЛЬЗОВАТЬСЯ. А Вы​ просто ЛОЖЬ заменить​ у него и​ D​ F2, затем Enter.​ таблицу заполняют люди​

​ лопачу интернет -​​ помощи!​: двоточие зачем и​
​ этих трюков с​ 15) = «@КОРРЕЛ(D»​ переходит на региональные​Roman777​ никак (чужой документ),​т.е. он находит​ «=IFERROR(VLOOKUP(RC4,Лист3!R5C1:R496C23,7,0),0)» Selection.Copy Range(Cells(60,​и​ полагаете, что макросы​ на 0 и​
​ как у тебя​LightZ​ Остановить запись. Посмотреть,​ очень далекие от​ похожего не вижу.​Есть таблица, по​ суть этой строки??​ автозаменой?​ & j &​ настройки (в русском​
​:​ можно определиться с​ пустую ячейку, в​

​ 41), Cells(410, 41)).PasteНо​​vikttur,​ не умеют работать​ повторно активировать формулу​
​ — всегда берется​
​: Саш, а ты​ что записал рекордер.​ макросов.. в то​Прошу помощи!​ мере заполнения которой​kai1337​Hugo121​ «:O» & j​
​ разделитель «;»). Как​superpsih​ диапазоном и записать​ данном случае К3​
​ хотелось бы более​​Вопрос решен.​
​ с «максимально унифицированным​
​С русскими названиями​ строка с номером​ тестил?​

​Поверьте — и​​ же время для​использую Excel 2010​
​ нужно вставлять из​: Ципихович Эндрю, Исправьте​
​: .formulalocal=​
​ & «;D» &​ вариант можно писать​

​, попробуйте поменять на​​ где то так:​
​ и вписывает в​ культурнее сделать код​Тема закрыта​ данными»?​
​ формул тоже работает,​
​ 130.​У меня так​
​ проще и всегда​ последующего анализа данные​Private Sub InsertFormula()​

​ кода VBA в​​ пожалуйста как надо​​Или пишите на​​ i & «:O»​ Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub b()​ «, «​Cells(NextRow, 11).value=Application.WorksheetFunction.Average(mRng). Должно​
​ нее формулу =СРЗНАЧ(F3:J3)​Казанский​андрей тетерин​ikki​ может это зависит​LightZ​

​ не работает.​​ работать будет.​
​ должны быть максимально​ With Sheets(«PEE») .Cells(ActiveCell.Row,​ некоторые ячейки формулы.​
​ , спасибо заранее)))​ английском.​

​: А, точно​​Вариант​ikki​ унифицированы. Поэтому и​ 4).Formula = «=ЕСЛИ(ЕОШИБКА(ВПР(B130;Данные!A:B;2;ЛОЖЬ));»»;ВПР(B130;Данные!A:B;2;ЛОЖЬ))»​
​особенность формул такова,​Busine2009​ДмитрийVBA​ «)» ‘после исполнения​End Sub​: Хм, заработало и​
​KoGG​ нажатию кнопки. при​Range(Cells(60, 41), Cells(410,​ рабочий код который​

​FormulaR1C1​​ikki​ну, тогда по​Cells(ActiveCell.Row, 4).FormulaLocal =​
​: .Cells(ActiveCell.Row, 4).FormulaR1C1 =​ возникло такое решение.​

​ ‘для столбца D​​ что часть данных​: если работает, значит​

​:​​ макроса замена «@»​
​ДмитрийVBA​ в формуле «,»​: Оптимальнее использовать FormulaR1C1​ следующем нажатии должен​ 41)).FormulaR1C1 = «=IFERROR(VLOOKUP(RC4,Лист3!R5C1:R496C23,7,0),0)»​ сделан с помощь​(с использованием​: при «повторно активировать»​ идее нужно так​ «=ЕСЛИ(ЕОШИБКА(ВПР(B130;Данные!A:B;2;ЛОЖЬ));»»»»;ВПР(B130;Данные!A:B;2;ЛОЖЬ))»​ «=ЕСЛИ(ЕОШИБКА(ВПР(RC2;Данные!C1:C2;2;ЛОЖЬ));»»;ВПР(RC2;Данные!C1:C2;2;ЛОЖЬ))» ‘для столбца​The_Prist​ .Cells(ActiveCell.Row, 8).Formula =​ берется с текущего​ так.​Не по теме:​

​ на «=» Next​​: Надо было сделать​​ меняется автоматически на​​Cells(NextRow, 11).FormulaR1C1 =​​ записать в ячейку​​DSH​ гуру. это для​
​английских​ — ясен перец,​
​ (FormulaR1C1):​ikki​ D​: Вместо Formula -​ «=ЕСЛИ(ЕОШИБКА(ВПР(D130;Данные!B:C;2;ЛОЖЬ));»»;ВПР(D130;Данные!B:C;2;ЛОЖЬ))» ‘для столбца​

​ листа (PEE), а​​Ципихович Эндрю​
​как у Вас все​
​ j Next i​
​ массовую вставку формулы​

​ «;». Колдунство какое-то​​ «=AVERAGE(RC6:RC10)»​ К4 формулу​​: Казанский, Спасибо большое​​ тех кто столкнется​​функций) — лучше​​ заработает.​​Cells(ActiveCell.Row, 4).FormulaR1C1 =​​: не тестил.​​остальное аналогично.​

​ FormulaLocal​​ H .Cells(ActiveCell.Row, 12).Formula​ часть из другого​: как я могу​ в голову помещается. ​ ‘здесь попробовал записать​ корреляции, которые просто​
​ :). Спасибо!​superpsih​=СРЗНАЧ(F4:J4) итд​ за помощь. Я​ с таким вопросом:​ всего.​но, имхо, это​ «=ЕСЛИ(ЕОШИБКА(ВПР(RC2,Данные!C1:C2,2,ЛОЖЬ)),»»»»,ВПР(RC2,Данные!C1:C2,2,ЛОЖЬ))»​но с подачи​пс. в Excel​К тому же​

​ = «ЕСЛИ(ЕОШИБКА(I130/(H130*0,82));»»;I130/(H130*0,82))» ‘для​​ (Данные)​ исправить если не​ =/​
​ макрос, но не​ так не протянуть,​
​Roman777​: Помогите, пожалуйста, разобраться.​Все имена заняты​ понял суть.​’Процедура вставки формул​

​и от локали​​ неспортивно​
​ikki​ Дмитрия я уже​

​ 2007-2013 можно использовать​​ кавычки — «»​ столбца L End​Адреса ячеек в​

​ знаю её сути,​​Hugo121​ понял как вставить​ поэтому написал код:​

Excel 2007: записать формулу в ячейку

​:​​Вставляю формулу в​
​: Такой вариант​RAN​ Private Sub InsertFormula()​ не зависит.​
​LightZ​
​: у меня такой​ поправил точку с​ функцию ЕСЛИОШИБКА -​ — необходимо делать​ With End Sub​ формулах то же​
​ зачем она задумана​:​ это в цикл,​Sub find_corr() For​superpsih​
​ ячейку следующим образом:​NextRow = Range(«K65536»).End(xlUp).Row​: В следствии изменения​ With Sheets(«PEE») .Cells(ActiveCell.Row,​а то мало​
​: Ок, давай тогда​

​ вариант дает ошибку​​ запятой на запятую.​
​ и короче, и​ двойными. В там​Желаемый результат -​ надо как то​но думаю, что​Не по теме:​

​ поэтому пошел сложным​​ i = 2​

​, сам не пойму​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub temp()​

​ + 1 Cells(NextRow,​​ предыдущего сообщения, смысл​ 4).FormulaR1C1Local = «=ЕСЛИ(ЕОШИБКА(ВПР(RC2;Данные!C1:C2;2;ЛОЖЬ));»»»»;ВПР(RC2;Данные!C1:C2;2;ЛОЖЬ))»​ ли — попадёт​

​ найдём универсальный вариант​​ #имя?​потестил.​ повторных вычислений не​ виде как у​ вставка формулы в​
​ менять, таблица то​ кавычки и :​

​давно тут сидим. ​​ путем 🙁 ‘For​
​ To 240 For​ сей феномен. но​

Вставка формулы в ячейку (Макросы/Sub)

​Cells(2, 35).FormulaR1C1 =​​ 11).FormulaLocal = «=ÑÐÇÍÀ×(F»​
​ ответа утерян.​ ‘для столбца D​
​ такой макрос на​
​Юрий М​если​
​оказывается, для FormulaR1C1​
​ требует. но с​ Вас рекордер не​ ячейку с учетом​ растет. ​ не нужны​да и не​ i = 1​ j = 2​ тоже сталкивался. )​ «=SUM(RC[-31];RC[-30])»​ & NextRow &​

​Igor__​​ .Cells(ActiveCell.Row, 8).FormulaR1C1Local =​​ англоязычный Excel -​​: Цитатаандрей тетерин пишет:​FormulaR1C1​

​ нужны разделители запятые​​ 2003 и старше​ воспримет их, т.к.​ следующего правила: в​При выполнении процедуры​kai1337​

​ сложно это -​​ To 1000 ‘​​ To 240 ‘Cells(i,​​buchlotnik​End Sub​ «:J» & NextRow​

​: доброго времени суток!​​ «=ЕСЛИ(ЕОШИБКА(ВПР(RC4;Данные!C2:C3;2;ЛОЖЬ));»»»»;ВПР(RC4;Данные!C2:C3;2;ЛОЖЬ))» ‘для столбца​ и пиши пропало​поверьте — нужны!​ ​, то надо использовать​ ​а для FormulaR1C1Local​ несовместима.​ они являются еще​ функции ВПР адрес​ возникает ошибка выполнения​: Вообще цель работы​ теперь и Вы​ Range(«Q3»).Select ‘ ActiveCell.FormulaR1C1​ j + 15)​: это не колдунство,​Выдаёт ошибку. В​ & «)»​
​друзья, каким образом​
​ Н .Cells(ActiveCell.Row, 12).FormulaR1C1Local​

Вставка формулы в ячейку через макрос

​LightZ​​ таблицу заполняют люди​ английские имена функций:​ — точка с​ппс. упс, на​ и служебным символом,​
​ искомой ячейки -​ — мне кажется​ : Изучение МАРКОРЕКОРДЕРА​ это запомнили :)​ = «=CORREL(R2C4:R2C15,RC[-13]:RC[-2])» End​ = «=КОРРЕЛ(D» &​ если хотите задавать​ чём может быть​Igor__​ можно записать в​ = «=ЕСЛИ(ЕОШИБКА(RC9/(RC8*0,82));»»»»;RC9/(RC8*0,82))» ‘для​: вот так работает:​ очень далекие от​ IF, ISERROR, VLOOKUP​ запятой.​ русские функции и​ означающим текст.​ строка относительная столбец​ она связана с​ VBA.​kai1337​ SubВ комментариях в​ j & «:O»​ формулу через​ проблема? Причём проблема​: не срабатывает​ ячейку формулу с​ столбца L End​FormulaR1C1Local = «=ЕСЛИ(ЕОШИБКА(ВПР(RC2;Данные!C1:C2;2;ЛОЖЬ));»»»»;ВПР(RC2;Данные!C1:C2;2;ЛОЖЬ))»​ макросов.. в то​LightZ​ikki​ кавычки я внимания​Хотя самый оптимальный​ абсолютный​ адресами ячеек.​Сервис(tools)макрос(Macro)Начать запись(Record New​: Private Sub A1B1B2()​ коде есть пояснения.​ & j &​200?’200px’:»+(this.scrollHeight+5)+’px’);»>.FormulaR1C1​
​ в знаке «;».​Все имена заняты​ помощью макроса.​ With End Sub​и так:​ же время для​

​: Вариант с FormulaR1C1Local​​:​
​ не обратил.​ и универсальный способ​

​vikttur​​Мне кажется нужно​

​ With Worksheets(«Лист1») .Range(«B1»)​ Задача, конечно, решена,​ «;D» & i​

​, необходимо использовать​​ Если его заменить​

​вот часть кода​
​DSH​FormulaR1C1 = «=IF(ISERROR(VLOOKUP(RC2,Данные!C1:C2,2,FALSE)),»»»»,VLOOKUP(RC2,Данные!C1:C2,2,FALSE))»​ последующего анализа данные​ — хоть убей,​

Макрос, вставляющий формулу в ячейку

​LightZ​​The Prist​ перенести формулу с​: Если макросы разрешены​ как то подменить​Запись макроса (Record​ = «1» .Range(«B2»)​ но это как-то​

​ & «:O» &​​ стандарты оригинала, а​ на «:», то​

​Igor__​​NextRow = Range(«K65536»).End(xlUp).Row​: Поясните пожалуйста. Вроде​андрей тетерин​

​ должны быть максимально​​ но ошибка vba​, насколько я понял,​

​прав.​​ листа в макрос​ — нужна ли​ адреса в формуле​ Macro)​
​ = «2» .Range(«A1»)=»B1+B2:»​ неправильно..​ i & «)»​

​ в английском аргументы​​ всё работает, но​: не работало из-за​ + 1 Cells(NextRow,​
​ указываю диапазон для​: Спасибо, уважаемые! низкий​
​ унифицированы. А этим​ 1004​

Источник

Копирование формул без сдвига ссылок

Проблема

Предположим, что у нас есть вот такая несложная таблица, в которой подсчитываются суммы по каждому месяцу в двух городах, а затем итог переводится в евро по курсу из желтой ячейки J2.

Проблема в том, что если скопировать диапазон D2:D8 с формулами куда-нибудь в другое место на лист, то Microsoft Excel автоматически скорректирует ссылки в этих формулах, сдвинув их на новое место и перестав считать:

Задача: скопировать диапазон с формулами так, чтобы формулы не изменились и остались теми же самыми, сохранив результаты расчета.

Способ 1. Абсолютные ссылки

Способ 2. Временная деактивация формул

Чтобы формулы при копировании не менялись, надо (временно) сделать так, чтобы Excel перестал их рассматривать как формулы. Это можно сделать, заменив на время копирования знак «равно» (=) на любой другой символ, не встречающийся обычно в формулах, например на «решетку» (#) или на пару амперсандов (&&). Для этого:

  1. Выделяем диапазон с формулами (в нашем примере D2:D8)
  2. Жмем 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 и скопируйте туда текст вот такого макроса:

    Для запуска макроса можно воспользоваться кнопкой Макросы на вкладке Разработчик (Developer — Macros) или сочетанием клавиш Alt+F8. После запуска макрос попросит вас выделить диапазон с исходными формулами и диапазон вставки и произведет точное копирование формул автоматически:

    Источник

    Подскажите, пожалуйста, как вставить формулу в ячейку с помощью макроса?

    Попробовал вот так вот

    Private Sub Worksheet_Change(ByVal Target As Range)
        Sheets("Лист1").Range("C3").Formula = "=СУММ(A1;B1)"
    End Sub

    но дебаггер ругается :)  В чём причина? Может быть ему не нравится, что формулы из локализованной версии вставляют? Попробовал заменить «СУММ» на «SUM», но он опять ругается.
    Разумеется, для суммы можно обойтись без слов. Если вставить вот такую формулу «=A1+B1», тогда всё работает без проблем, но как вставлять «серьёзные» формулы со словами? Например, ЕСЛИ, ИНДЕКС и т.п.?

    И ещё вопрос: выражения
    Sheets(«Лист1»).Range(«C3»).Formula =…
    и
    Worksheets(«Лист1»).Range(«C3»).Formula =…
    тождественны или между ними есть разница?

    Муж это единственный зарегенный юзер, а все остальные это хакеры :)


    В данном случае нужно написать так:
    Sheets(«Лист1»).Range(«C3»).FormulaLocal = «=СУММ(A1;B1)»
    Метод Formula для тех случаев, когда вы используете стиль ссылок RC
    вЫРАЖЕНИЯ АБСОЛЮТНО ОДИНАКОВЫЕ

    Не торопись, и все успеешь намного быстрее


    Sheets — это все листы, в том числе и с диаграммами. Если вдруг при исполнении «for each ws in sheets» один из них будет с диаграммой (юзер вставил) — Ваш код, рассчитанный на ячейки, рухнет.

    webmoney: E265281470651 Z422237915069 R41892628200


    sergo44441 и Hugo121, спасибо за помощь! Как говорится, век живи, век учись! :) В карме отметился.

    Муж это единственный зарегенный юзер, а все остальные это хакеры :)


    При изменении ячеек на событие Изменение следует отключать реакцию на события, чтобы не получить бесконечный цикл:

    Private Sub Worksheet_Change(ByVal Target As Range)
      Application.EnableEvents = False
      Sheets("Лист1").[C3].Formula = "=SUM(A1,B1)"
      Application.EnableEvents = True
    End Sub

    Или, что более практично, вписывать формулу только при выполнении условия…

    Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


    Цитата: Шпец Докапыч от 23.08.2010, 15:01
    При изменении ячеек на событие Изменение следует отключать реакцию на события, чтобы не получить бесконечный цикл:
    Private Sub Worksheet_Change(ByVal Target As Range)
     Application.EnableEvents = False
     Sheets("Лист1").[C3].Formula = "=SUM(A1,B1)"
     Application.EnableEvents = True
    End Sub

    Спасибо за ценный совет! (+1) Обязательно им воспользуюсь. А то я из-за этих самых бесконечных циклов последнее время вообще уже перестал использовать событие Change. Стараюсь его «обходить».

    Цитата: Шпец Докапыч от 23.08.2010, 15:01Или, что более практично, вписывать формулу только при выполнении условия…

    В смысле, через If Target=… ?

    Муж это единственный зарегенный юзер, а все остальные это хакеры :)


    Здесь можно обыграть по-разному. Например,
    Прервать работу макроса, если изменено сразу несколько ячеек:
    If Target.Count > 1 Then Exit Sub
    Продолжить работу макроса только при условии изменения ячейки «A1»:
    If Target.Address = «$A$1» Then
    …или первого столбца:
    If Target.Column = 1 Then
    …или определённого диапазона:
    If Not Intersect(Target, Range(«A1:A99»)) Is Nothing Then

    Ну и всё в таком духе…

    Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


    Цитата: Шпец Докапыч от 01.09.2010, 14:52
    Здесь можно обыграть по-разному. Например,
    Прервать работу макроса, если изменено сразу несколько ячеек:
    If Target.Count > 1 Then Exit Sub
    Продолжить работу макроса только при условии изменения ячейки «A1»:
    If Target.Address = «$A$1» Then
    …или первого столбца:
    If Target.Column = 1 Then
    …или определённого диапазона:
    If Not Intersect(Target, Range(«A1:A99»)) Is Nothing Then

    Ну и всё в таком духе…

    Понял, спасибо! Честно говоря, я даже не подозревал о таких возможностях «Таргета».

    Муж это единственный зарегенный юзер, а все остальные это хакеры :)


    Решил вдохнуть в эту тему новую жизнь :)

    Вопрос такой.
    Теперь надо программно вставить не просто формулу, а формулу массива. Подскажите, пожалуйста, как это сделать.

    Пробовал вот так вот:

            [МойДиапазон].Cells(Строка).FormulaLocal = _
                 "{=НАИМЕНЬШИЙ(ЕСЛИ(ПолеЗначенийТаблицыАнализа=МАКС(ПолеЗначенийТаблицыАнализа);" & _
                    "СТРОКА(ПолеЗначенийТаблицыАнализа)*1000+СТОЛБЕЦ(ПолеЗначенийТаблицыАнализа));" & _
                                                                         "СТРОКА(A" & Строка & "))}"

    Но Экселю это почему-то не понравилось :)

    Хотя и вставилось-то именно так, как я хотел, но почему-то формула не работает. Где ошибка?

    Файл, по мотивам которого я экспериментирую, находится вот здесь:
    https://forum.msexcel.ru/microsoft_excel/kak_poluchit_adres_yacheyki_s_izvestnym_znacheniem-t8667.0.html;msg44850#msg44850

    Но мне сейчас, на самом деле, нужно не готовое решение, а только подсказка, как это делать, в смысле, программно вставлять в ячейки формулы массивов.

    Муж это единственный зарегенный юзер, а все остальные это хакеры :)


    Цитата: Serge 007 от 15.10.2012, 00:22

    Цитата: Олег* от 14.10.2012, 23:26
    Теперь надо программно вставить не просто формулу, а формулу массива. Подскажите, пожалуйста, как это сделать.

    Так (с помощью FormulaArray):
            [МойДиапазон].Cells(Строка).FormulaArray = _
            "=INDEX(R2C2:R21C2,SMALL(IF(MATCH(R2C2:R21C2,R2C2:R21C2,FALSE)=ROW(R2C2:R21C2)-1,ROW(R2C2:R21C2)-1),ROW()-1))"


    Или, для Вашей формулы

        [МойДиапазон].Cells(Строка).FormulaArray = _
            "=SMALL(IF(ПолеЗначенийТаблицыАнализа=MAX(ПолеЗначенийТаблицыАнализа)," & _
            "ROW(ПолеЗначенийТаблицыАнализа)*1000+COLUMN(ПолеЗначенийТаблицыАнализа))," & _
            "ROW(A" & строка & "))"

    Скажи мне, кудесник, любимец ба’гов…

    Яндекс-деньги: 41001632713405
    Webmoney: R289877159277; Z102172301748; E177867141995



    _Boroda_ и Serge 007

    Огромное вам спасибо!!!

    На самом деле, без вашей подсказки я бы ещё о-о-чень долго не смог бы сообразить, что под эту задучу нужен совсем другой метод (FormulaArray), да к тому же еще все должно быть в нелокализованном виде и вместо точек с запятой надо использовать просто запятые.

    Муж это единственный зарегенный юзер, а все остальные это хакеры :)


    Олег, самый простой (с моей точки зрения) метод, чтобы не было «о-о-чень долго не смог бы сообразить» и чтобы легко переводить функции на буржуйский — пишете формулу, проверяете ее правильность, если все нормально, то встаете в ячейку с формулой (не обязательно, можно потом), включаете запись макроса, тычете мышой в строку формул и нажимаете Контрл+Ентер для обычной формулы (не обязательно, можно просто Ентер) и Контрл+Шифт+Ентер для формулы массива. Выключаете запись макроса, Альт+Ф11 и смотрите, что получилось.

    Скажи мне, кудесник, любимец ба’гов…

    Яндекс-деньги: 41001632713405
    Webmoney: R289877159277; Z102172301748; E177867141995


    Цитата: _Boroda_ от 15.10.2012, 09:24
    Олег, самый простой (с моей точки зрения) метод, чтобы не было «о-о-чень долго не смог бы сообразить» и чтобы легко переводить функции на буржуйский — пишете формулу, проверяете ее правильность, если все нормально, то встаете в ячейку с формулой (не обязательно, можно потом), включаете запись макроса, тычете мышой в строку формул и нажимаете Контрл+Ентер для обычной формулы (не обязательно, можно просто Ентер) и Контрл+Шифт+Ентер для формулы массива. Выключаете запись макроса, Альт+Ф11 и смотрите, что получилось.

    Спасибо! Взял на вооружение!

    Муж это единственный зарегенный юзер, а все остальные это хакеры :)


    Цитата: Олег* от 16.10.2012, 21:00

    Цитата: _Boroda_ от 15.10.2012, 09:24
    Олег, самый простой (с моей точки зрения) метод, чтобы не было «о-о-чень долго не смог бы сообразить» и чтобы легко переводить функции на буржуйский — пишете формулу, проверяете ее правильность, если все нормально, то встаете в ячейку с формулой (не обязательно, можно потом), включаете запись макроса, тычете мышой в строку формул и нажимаете Контрл+Ентер для обычной формулы (не обязательно, можно просто Ентер) и Контрл+Шифт+Ентер для формулы массива. Выключаете запись макроса, Альт+Ф11 и смотрите, что получилось.

    Спасибо! Взял на вооружение!

    К сожалению, при таком подходе, ссылки получаются в формате R1C1 и относительно активной ячейки.

    Муж это единственный зарегенный юзер, а все остальные это хакеры :)


    Цитата: Олег* от 17.10.2012, 20:31
    К сожалению, при таком подходе, ссылки получаются в формате R1C1 и относительно активной ячейки.

    Так это мы просто посмотрели общий вид формулы и ангицкие названия функций.
    А потом в то, что получилось на ВБА нудно вставить диапазоны из формулы в Excel.
    Это поначалу так, а потом, когда приспособитесь, то можно будет сразу в ВБА руками формулу набивать

    Скажи мне, кудесник, любимец ба’гов…

    Яндекс-деньги: 41001632713405
    Webmoney: R289877159277; Z102172301748; E177867141995


    «нудно вставить» — это по Фрейду описка? :) Точно подмечено…

    webmoney: E265281470651 Z422237915069 R41892628200


    Понравилась статья? Поделить с друзьями:
  • Excel макрос вставки пустых строк
  • Excel макрос вставить формулу в ячейку
  • Excel макрос вставить текст в ячейку
  • Excel макрос вставить столбец
  • Excel макрос вставить несколько строк