Vba как вставить формулу в ячейку excel
Перейти к содержимому

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

  • автор:

Свойство Range.Formula (Excel)

Возвращает или задает значение Variant , представляющее неявно пересекающуюся формулу объекта в нотации стиля A1.

Синтаксис

expression. Формула

выражение: переменная, представляющая объект Range.

Замечания

В Excel с поддержкой динамических массивов Range.Formula2 заменяет Range.Formula. Range.Formula будет по-прежнему поддерживаться для обеспечения обратной совместимости. Обсуждение динамических массивов и Range.Formula2 можно найти в разделе документации по Excel VBA Формула и Формула 2.

См. также

Свойство Range.Formula2

Это свойство недоступно для источников данных OLAP.

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

Если для ячейки задано значение или формула даты, Microsoft Excel проверяет, что ячейка уже отформатирована с помощью одного из форматов чисел даты или времени. В противном случае Excel изменит числовой формат на короткий формат даты по умолчанию.

Если диапазон состоит из одного или двух измерений, можно установить формулу для массива Visual Basic с теми же размерами. Аналогично, можно поместить формулу в массив Visual Basic.

Формулы, заданные с помощью Range.Formula, могут вызывать неявное пересечение.

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

Пример

В следующем примере кода задается формула для ячейки A1 на Листе1.

Worksheets("Sheet1").Range("A1").Formula = "=$A$4+$A$10" 

В следующем примере кода задается формула ячейки A1 на листе 1 для отображения текущей даты.

Sub InsertTodaysDate() ' This macro will put today's date in cell A1 on Sheet1 Sheets("Sheet1").Select Range("A1").Select Selection.Formula = "=text(now(),""mmm dd yyyy"")" Selection.Columns.AutoFit End Sub 

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе https://aka.ms/ContentUserFeedback.

Отправить и просмотреть отзыв по

Вставить формулу в первую пустую ячейку и протянуть до последней строки

Вставили формулу в первый пустой столбец. Дальше непонятно. Какую формулу писать для следующих столбцов? Столбцы J, K, L, M. — они в диапазоне ДО найденного последнего столбца или это те столбцы, в которые нужно писать формулу? Много столбцов — откуда брать это количество? Почему берем строку 10? Это первая строка таблицы?

9 сен 2019 в 6:35

Формула то самое,после другово нажатия она перемещается в другой пустой столбец и заполняется до последних строк «=IFERROR(INDEX(Sas!$A$10:$AC200,MATCH(H11,Sas!N$10:N$200,0),5),0)» «=IFERROR(INDEX(Sas!$A$10:$AC200,MATCH(H12,Sas!N$10:N$200,0),5),0)» и так далее меняеца «н» индех ,да это первая строка таблицы

9 сен 2019 в 7:18

Например, нашли, что первый пустой столбец — J. Каким будет последний столбец для вставки формулы? Как определить, до какого столбца тянуть? Или задача другая — формулы тянуть от столбца J и до найденного последнего столбца таблицы?

9 сен 2019 в 7:24

последнево столбца небудет ,надо вставлять постоянно в другой столбец после другово нажатия кнопки и заполняется до последней строки

9 сен 2019 в 7:38

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

Как поместить формулу в язык vba?

Но то что я начитался в инете не помогло :с с решением задачи.
Работа формулы простая, возьми из столбца Т дату рождения , в столбце Е число 31.12.2022. На выходе в столб D выведи актуальный возраст.
И еще вопрос, если вставить формулу в ячейку через VBA, в самой ячейке будет результат текстом или формул прям ?

Сама формула из гугл таблицы.

  • Вопрос задан более года назад
  • 256 просмотров

1 комментарий

Простой 1 комментарий

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

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

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

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

Range ( «F1» ) . FormulaLocal = «=СУММ(A1:E1)»
Range ( «F1» ) . FormulaLocal = «=СУММ(A1;B1;C1;D1;E1)»
Sub Primer1 ( )
Dim i As Byte
For i = 1 To 10
Range ( «F» & i ) . FormulaLocal = «=СУММ(A» & i & «:E» & i & «)»
Range ( «F1» ) . Formula = «=SUM(A1,B1,C1,D1,E1)»
После вставки формула автоматически преобразуется в локальную (на языке пользователя).

Свойство Range.FormulaR1C1Local

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

‘Абсолютные ссылки в стиле 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, абсолютные по столбцам и относительные по строкам:
Range ( «F1:F10» ) . FormulaR1C1Local = «=СУММ(RC1:RC5)»
‘Относительные ссылки в стиле R1C1:
Range ( «F1:F10» ) . FormulaR1C1Local = «=СУММ(RC[-5]:RC[-1])»

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

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

22 комментария для “VBA Excel. Вставка формулы в ячейку”

Доброго времени суток.
Кто-нибудь подскажет, как написать в vba excel вот такую формулу: =»пример текста » & D1 в ячейку, где «пример текста » и D1 должна быть выражена в виде переменных. В итоге в ячейке должно отобразиться: пример текста 50 при условии, что d1=50

Dim s As String , myRange As Range
s = «пример текста »
Range ( «D1» ) = 50
Set myRange = Range ( «D1» )

Range ( «A1″ ) . FormulaLocal = » crayon-h»> & Chr ( 34 ) & s & Chr ( 34 ) & Chr ( 38 ) & myRange . Address

Спасибо большое! Совсем из вида упустил, что можно применить Chr(34).

Ещё один вопрос, почему абсолютная ссылка получается =»Пример текста «&$D$1 , как сделать, что бы была относительная =»Пример текста «&D1 ?

Dim s As String , r As String
s = «пример текста »
Range ( r ) = 50
Range ( «A1″ ) . FormulaLocal = » crayon-h»> & Chr ( 34 ) & s & Chr ( 34 ) & Chr ( 38 ) & r
Ещё раз большое спасибо за оперативность.
Cells ( a , d ) . Formula = Cells ( a , d ) . Value
Cells ( a , d ) . FormulaLocal = Cells ( a , d ) . Value
Cells ( a , d ) . FormulaR1C1Local = Cells ( a , d ) . Value
Cells ( a , d ) . Value = Evaluate ( Ref )

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

Range ( «A10» ) . FormulaLocal = Replace ( Range ( «A10» ) . FormulaLocal , «H3» , «H10» )
Огромное спасибо) В понедельник приду на работу, и обязательно попробую Ваш вариант.

Добрый вечер. Мне нужно использовать математические операции, опираясь только на переменные. Например:
Cells(i, SOH).Formula = (Cells(i, Stock_rep_date) + Cells(i, Consig_Stock_rep_date)) / 1
Но в ячейках получаются сами значения, а нужна формула с ссылками на ячейки Cells.

Здравствуйте, Дмитрий!
Cells(i, SOH).Formula = «=(» & Cells(i, Stock_rep_date).Address & «+» & Cells(i, Consig_Stock_rep_date).Address & «)/1»

Здравствуйте, Евгений!
Можете помочь?
Дано:
1. В ячейках D1 и D2 некие текстовые данные, которые необходимо объединить в ячейку D3
Range(«D3»).FormulaR1C1 = «=R[-2]C&R[-1]C» 2. Потом в Ячейку D4 получившийся результат вставить как значение
Range(«D3»).Copy
Range(«D4»).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False 3. И в ячейке D4 между данными вставить перенос на вторую строку. К примеру:
Range(«C4»).FormulaR1C1 = «Видеокарта» & Chr(10) & «GTX 3090») . Но проблема в том, что данные неизвестны и могут меняться.
А объединить первый макрос с третьим у меня не получается.
Подскажите как можно одним макросом объединить данные двух ячеек сразу с переносом данных второй ячейки во вторую строку ячейки. Спасибо.

‘в D3 объединяем в одну строку
[ D3 ] = [ D1 ] & [ D2 ]
‘в D4 объединяем в две строки
[ D4 ] = [ D1 ] & vbNewLine & [ D2 ]
[D3] — это то же, что и Range(«D3»)
Здравствуйте, Евгений!
Это и нужно было.
Огромное Вам спасибо.

Добрый день! Подскажите в одном вопросе. Есть две ячейки, в одной из них находится число, при введении во вторую ячейку числа, число из первой ячейки уменьшается ровно на столько же, сколько введено во вторую ячейку. Очень важно, чтобы число в первой ячейки можно было хаотически менять, т.е. в первой ячейке была формула и число. Спасибо!

Добрый день, Дмитрий!
Ответ на ваш вопрос соответствует формуле =C1-B1, вставленной в ячейку A1. При вводе значения в ячейку B1, значение ячейки A1 уменьшается на значение ячейки B1. Изменяя значение ячейки C1, вы произвольно изменяете значение в ячейке A1.

Не совсем то, что имел ввиду. Есть только две ячейки А1 и В1. В ячейке А1 должно быть две операции.
1. Это вшитая формула.
2. Это свободный ввод числа.
Т.е. при внесении числа методом ввода или вставкой в ячейку А1 например 15, а в ячейку В1 например 4, значение в ячейке А1 автоматом менялось на 11. Можно конечно просто вносить в формулу ячейки А1=15-В1 и менять число 15 на любое другое, но это надо влезать в формулу. А нужен свободный ввод для вставки большого массива данных.

Private Sub Worksheet_Change ( ByVal Target As Range )
If Not Application . Intersect ( Cells ( 1 , 2 ) , Range ( Target . Address ) ) Is Nothing _
And IsNumeric ( Cells ( 1 , 2 ) ) Then
Cells ( 1 , 1 ) = Cells ( 1 , 1 ) — CVar ( Cells ( 1 , 2 ) )
Евгений, спасибо большое. То, что надо, работает отлично!

Диапазон С12:С27 может принимать одно из трех значений
жар
пар
пир
В столбце «Е» формула :
=ЕСЛИ(C13=»жар»;СЛУЧМЕЖДУ(10;20);ЕСЛИ(C13=»пир»;ЦЕЛОЕ($F$10/10);ЕСЛИ(C13=»пар»;ЦЕЛОЕ($I$10/100);»»)))
меня попросили сделать решение на макросах
For n = 12 To 27
If Cells(n, 3) = «жар» Then Cells(n, 5).Value = Int(Rnd() * 10) + 11
If Cells(n, 3) = «пир» Then Cells(n, 5).Value = Int(Range(«f10») / 10)
If Cells(n, 3) = «пар» Then Cells(n, 5).Value = Int(Range(«i10») / 100)
Next n
всё замечательно работает.
НО…
по непонятной причине должна быть видна формула
Range(«Е13″).FormulaLocal =»=ЕСЛИ(C13=»жар»;СЛУЧМЕЖДУ(10;20);ЕСЛИ(C13=»пир»;ЦЕЛОЕ($F$10/10);ЕСЛИ(C13=»пар»;ЦЕЛОЕ($I$10/100);»»)))»
машина ругается .
новый подход:
Range(«С13:C27»).FormulaR1C1 = .
и хрен не слаще редьки.
Включаю и записываю макрорекордером . Машина формулу записывает на английском …
Возможно ли : формулу скопировал и вставил в код макроса ?

Евгений, здравствуйте. Имею только самые начальные представления в VBA. Хотелось бы выяснить в чем проблема в моем коде.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim strFormula As String
If Target.Address = «$B$2» Then
strFormula = «=—SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(R[-23]C[-2])&»»:»»&YEAR(R[-23]C[-1]))),12,31),LARGE(DATE(ROW(INDIRECT(YEAR(R[-23]C[-2])&»»:»»&YEAR(R[-23]C[-1]))),12,31),1),R[-23]C[-1])-(—SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(R[-23]C[-2])&»»:»»&YEAR(R[-23]C[-1]))),1,1),SMALL(DATE(ROW(INDIRECT(YEAR(R[-23]C[-2])&»»:»»&YEAR(R[-23]C[-1]))),1,1),1),R[-23]C[-2]+1))+1″
Range(«D26»).FormulaLocal = strFormula
Range(«D27»).Select
End If
End Sub
Ошибку выдаёт на строке Range(«D26»).FormulaLocal = strFormula . Как возможно это исправить?
С уважением Марина.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *