Vba excel рассчитать формулу

Home / VBA / VBA Calculate (Cell, Range, Row, & Workbook)

By default, in Excel, whenever you change a cell value Excel recalculates all the cells that have a calculation dependency on that cell. But when you are using VBA, you have an option to change it to the manual, just like we do in Excel.

calculate-cell-value-using-vba

Using VBA Calculate Method

You can change the calculation to the manual before you start a code, just like the following.

Application.Calculation = xlManual

When you run this code, it changes the calculation to manual.

using-vba-calculate-method

And at the end of the code, you can use the following line of code to switch to the automatic.

Application.Calculation = xlAutomatic
switch-to-automatic-using-vba

You can use calculation in the following way.

calculation-method-vba-code
Sub myMacro()
    Application.Calculation = xlManual   
        'your code goes here   
    Application.Calculation = xlAutomatic
End Sub

Calculate Now (All the Open Workbooks)

If you simply want to re-calculate all the open workbooks, you can use the “Calculate” method just like below.

Calculate

Use Calculate Method for a Sheet

Using the following way, you can re-calculate all the calculations for all the

ActiveSheet.Calculate
Sheets("Sheet1").Calculate

The first line of code re-calculates for the active sheet and the second line does it for the “Sheet1” but you can change the sheet if you want.

Calculate for a Range or a Single Cell

In the same way, you can re-calculate all the calculations for a particular range or a single cell, just like the following.

Sheets("Sheet1").Range("A1:A10").Calculate
Sheets("Sheet1").Range("A1").Calculate

На чтение 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, вероятно, будут наилучшими.

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

-6 / 2 / 0

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

Сообщений: 274

1

Excel

28.06.2019, 16:04. Показов 11167. Ответов 7


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

Здравствуйте. Есть файл там основная формула: 10+ЕСЛИ(F100=$ALR$100;0;(AMB2506*2)-10)
остальные формул похожие, только рядом с другими диапазонами работают.
Так вот как такую формулу превратить в VBA, чтобы вычиcлять методом VBA.
Решил обратить к VBA, т.к. исчерпал возможности EXCEL. если в Excel сделать таких формул на 100тыс строк и 1тыс столбцов, то время вычисления сильно увеличивается и что самое главное размер файла увеличивается, и потом этот файл просто не открыть, так как не хватает оперативной памяти. Поэтому и решил обратить к VBA, чтобы возможно ускорить вычисления и уменьшить объём книги, за счёт того, что формул не будет, а будет методом VBA вычисляться.



0



pashulka

4131 / 2235 / 940

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

Сообщений: 4,624

28.06.2019, 21:15

2

Вашу формулу можно переписать так :

Код

=ЕСЛИ(F100=$ALR$100;10;AMB2506*2)

А вычислить (без ввода в ячейку), можно например так :

Visual Basic
1
2
f = "IF(F100=ALR100,10,AMB2506*2)"
MsgBox Evaluate(f)

или так (без формулы)

Visual Basic
1
2
3
4
5
If Range("F100") = Range("ALR100") Then
   MsgBox 10
Else
   MsgBox Range("AMB2506") * 2
End If

Разумеется, при 100т. строк имеет смысл не обращаться к об’ектам Range/Cells, а работать с массивом.



0



Erolim

-6 / 2 / 0

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

Сообщений: 274

28.06.2019, 23:16

 [ТС]

3

pashulka, а вы можете помочь мне запихнуть все эти 100тыс строк формул в массив? я это делать не умею к сожалению.
файл примера если надо я пришлю вам.

а тут

Visual Basic
1
2
3
4
5
If Range("F100") = Range("ALR100") Then
   MsgBox 10
Else
   MsgBox Range("AMB2506") * 2
End If

выскакивает какое то окошко, но в ячейку ничего не проставляется

Добавлено через 5 минут
pashulka, и нужно именно так как я указал в формуле: 10+ЕСЛИ(F100=$ALR$100;0;(AMB2506*2)-10).
просто вы не видели файл и не поняли суть вычисления. по вашей упрощённой формуле будет совсем другой результат при дальнейших вычислениях.

Добавлено через 1 час 20 минут
pashulka, хотя проверил только что. результат с формулой =ЕСЛИ(F100=$ALR$100;10;AMB2506*2) одинаковый.
но это не решило проблему.



0



3827 / 2254 / 751

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

Сообщений: 5,930

29.06.2019, 08:10

4

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

выскакивает какое то окошко, но в ячейку ничего не проставляется

естественно, в коде так и написано. читаем справку про MsgBox.

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

файл примера если надо я пришлю вам

Цепляйте маленький пример (строк 10) сюда.



0



-6 / 2 / 0

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

Сообщений: 274

29.06.2019, 11:10

 [ТС]

5

Vlad999, чуть больше чем 10 строк. внутри файла макросы Test0 и Test1. Сначала нажать Test0, потом Test1 и далее нажимать только Test1. увидите результат, по такому принципу должен работать и массив, сначала вычисляя диапазон AMB100:BYM2499, а потом AMB2506:BYM4905. Ну в общем по последовательности макроса Test1, только формулы заменить массивом.



0



-6 / 2 / 0

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

Сообщений: 274

04.07.2019, 21:02

 [ТС]

6

Здравствуйте. не ужели никто помочь не может?
хотя бы как написать формулу =ЕСЛИ(F100=$ALR$100;10;AMB2506*2) в VBA, что бы она вычисляла и в ячейку ABM100 ставила уже результат.



0



КостяФедореев

Часто онлайн

790 / 529 / 237

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

Сообщений: 1,820

05.07.2019, 01:33

7

Erolim, конкретно для этой формулы и именно для столбца «АМВ100» так:

Visual Basic
1
Sheets("Главный").Cells(100, Columns("AMB").Column).FormulaLocal = "=ЕСЛИ(F100=$ALR$100;10;AMB2506*2)"



0



-6 / 2 / 0

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

Сообщений: 274

05.07.2019, 02:46

 [ТС]

8

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

Добавлено через 1 час 9 минут
КостяФедореев, при том ещё, и написан ваш код неверно. выдаёт ошибку.



0



Skip to content

VBA Range Calculate — Explained with Examples

We calculate the particular range using VBA. Calculate method in Excel help us to calculate all opened workbooks, specific workbooks, specific worksheets, Ranges, columns or rows. This method will be useful when your Excel Calculation method is set to manual mode. or if you have many formulas in the workbook and want to refresh or recalculate a particular range you can use Range.Calculate method.

VBA Caluclate Method Excel Range Object

VBA Range Calculate – Syntax

You can use the calculate method of the range to calculate any range.

Range(“YourRange”).Calculate

VBA Range Calculate – Examples

Here is the simple example to calculate a specific Range. This example will calculate Range “A2:D10” using VBA.

Sub VBA_Calculate_Range()
    Range("A2:D10").Calculate
End Sub

VBA Range Calculate – Instructions

Please follow the below step by step instructions to execute the above mentioned VBA macros or codes:

  1. Open an Excel Workbook from your start menu or type Excel in your run command
  2. Enter some formula at B2 as “=D2” and enter some value at D2. Now you can see the D2 value at B2.
  3. Set the caluclation mode to manual to test this macro
  4. Change the value at D2, now you can see that B2 value is not change even you have made changes at D2
  5. Press Alt+F11 to Open VBA Editor or you can goto Developer Table from Excel Ribbon and click on the Visual Basic Command to launch the VBA Editor
  6. Insert a Module from Insert Menu of VBA
  7. Copy the above code (for Calculating a Range using VBA) and Paste in the code window(VBA Editor)
  8. Save the file as Macro Enabled Workbook (i.e; .xlsm file format)
  9. Press ‘F5′ to run it or Keep Pressing ‘F8′ to debug the code line by line.

Now you can observe that the value at B2 is changed as per D2.

Calculate the Columns using VBA

Here is the simple example to calculate a specific Columns. This example will calculate the columns “A to D” using VBA.

Sub VBA_Calculate_Columns()
    Columns("A:D").Calculate
    'Or Range("A:D").Calculate
End Sub

Calculate the Rows using VBA

Here is the simple example to calculate a specific rows using VBA. This example will calculate the Rows”1 to 20″ using VBA.

Sub VBA_Calculate_Rows()
    Rows("1:20").Calculate
End Sub
Effortlessly Manage Your Projects and Resources
120+ Professional Project Management Templates!

A Powerful & Multi-purpose Templates for project management. Now seamlessly manage your projects, tasks, meetings, presentations, teams, customers, stakeholders and time. This page describes all the amazing new features and options that come with our premium templates.

Save Up to 85% LIMITED TIME OFFER
Excel VBA Project Management Templates
All-in-One Pack
120+ Project Management Templates
Essential Pack
50+ Project Management Templates

Excel Pack
50+ Excel PM Templates

PowerPoint Pack
50+ Excel PM Templates

MS Word Pack
25+ Word PM Templates

Ultimate Project Management Template

Ultimate Resource Management Template

Project Portfolio Management Templates
  • VBA Range Calculate – Syntax
  • VBA Range Calculate – Examples
  • VBA Range Calculate – Instructions
  • Calculate the Columns using VBA
  • Calculate the Rows using VBA

VBA Reference

Effortlessly
Manage Your Projects

120+ Project Management Templates

Seamlessly manage your projects with our powerful & multi-purpose templates for project management.

120+ PM Templates Includes:
By PNRaoLast Updated: March 2, 2023

Effectively Manage Your
Projects and  Resources

With Our Professional and Premium Project Management Templates!

ANALYSISTABS.COM provides free and premium project management tools, templates and dashboards for effectively managing the projects and analyzing the data.

We’re a crew of professionals expertise in Excel VBA, Business Analysis, Project Management. We’re Sharing our map to Project success with innovative tools, templates, tutorials and tips.

Project Management
Excel VBA

Download Free Excel 2007, 2010, 2013 Add-in for Creating Innovative Dashboards, Tools for Data Mining, Analysis, Visualization. Learn VBA for MS Excel, Word, PowerPoint, Access, Outlook to develop applications for retail, insurance, banking, finance, telecom, healthcare domains.

Analysistabs Logo

Page load link

VBA Projects With Source Code

3 Realtime VBA Projects
with Source Code!

Take Your Projects To The Next Level By Exploring Our Professional Projects

Go to Top

In this Article

  • Formulas in VBA
  • Macro Recorder and Cell Formulas
  • VBA FormulaR1C1 Property
    • Absolute References
    • Relative References
    • Mixed References
  • VBA Formula Property
  • VBA Formula Tips
    • Formula With Variable
    • Formula Quotations
    • Assign Cell Formula to String Variable
    • Different Ways to Add Formulas to a Cell
    • Refresh Formulas

This tutorial will teach you how to create cell formulas using VBA.

Formulas in VBA

Using VBA, you can write formulas directly to Ranges or Cells in Excel. It looks like this:

Sub Formula_Example()

    'Assign a hard-coded formula to a single cell
    Range("b3").Formula = "=b1+b2"
    
    'Assign a flexible formula to a range of cells
    Range("d1:d100").FormulaR1C1 = "=RC2+RC3"

End Sub

There are two Range properties you will need to know:

  • .Formula – Creates an exact formula (hard-coded cell references). Good for adding a formula to a single cell.
  • .FormulaR1C1 – Creates a flexible formula. Good for adding formulas to a range of cells where cell references should change.

For simple formulas, it’s fine to use the .Formula Property.  However, for everything else, we recommend using the Macro Recorder

Macro Recorder and Cell Formulas

The Macro Recorder is our go-to tool for writing cell formulas with VBA.  You can simply:

  • Start recording
  • Type the formula (with relative / absolute references as needed) into the cell & press enter
  • Stop recording
  • Open VBA and review the formula, adapting as needed and copying+pasting the code where needed.

I find it’s much easier to enter a formula into a cell than to type the corresponding formula in VBA.

vba formula formular1c1

Notice a couple of things:

  • The Macro Recorder will always use the .FormulaR1C1 property
  • The Macro Recorder recognizes Absolute vs. Relative Cell References

VBA FormulaR1C1 Property

The FormulaR1C1 property uses R1C1-style cell referencing (as opposed to the standard A1-style you are accustomed to seeing in Excel).

Here are some examples:

Sub FormulaR1C1_Examples()

    'Reference D5 (Absolute)
    '=$D$5
    Range("a1").FormulaR1C1 = "=R5C4"
    
    'Reference D5 (Relative) from cell A1
    '=D5
    Range("a1").FormulaR1C1 = "=R[4]C[3]"
    
    'Reference D5 (Absolute Row, Relative Column) from cell A1
    '=D$5
    Range("a1").FormulaR1C1 = "=R5C[3]"
    
    'Reference D5 (Relative Row, Absolute Column) from cell A1
    '=$D5
    Range("a1").FormulaR1C1 = "=R[4]C4"

End Sub

Notice that the R1C1-style cell referencing allows you to set absolute or relative references.

Absolute References

In standard A1 notation an absolute reference looks like this: “=$C$2”.  In R1C1 notation it looks like this: “=R2C3”.

To create an Absolute cell reference using R1C1-style type:

  • R + Row number
  • C + Column number

Example:  R2C3 would represent cell $C$2 (C is the 3rd column).

    'Reference D5 (Absolute)
    '=$D$5
    Range("a1").FormulaR1C1 = "=R5C4"

Relative References

Relative cell references are cell references that “move” when the formula is moved.

In standard A1 notation they look like this: “=C2”. In R1C1 notation, you use brackets [] to offset the cell reference from the current cell.

Example: Entering formula “=R[1]C[1]” in cell B3 would reference cell D4 (the cell 1 row below and 1 column to the right of the formula cell).

Use negative numbers to reference cells above or to the left of the current cell.

    'Reference D5 (Relative) from cell A1
    '=D5
    Range("a1").FormulaR1C1 = "=R[4]C[3]"

Mixed References

Cell references can be partially relative and partially absolute.  Example:

    'Reference D5 (Relative Row, Absolute Column) from cell A1
    '=$D5
    Range("a1").FormulaR1C1 = "=R[4]C4"

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

VBA Formula Property

When setting formulas with the .Formula Property you will always use A1-style notation.  You enter the formula just like you would in an Excel cell, except surrounded by quotations:

    'Assign a hard-coded formula to a single cell
    Range("b3").Formula = "=b1+b2"

VBA Formula Tips

Formula With Variable

When working with Formulas in VBA, it’s very common to want to use variables within the cell formulas.  To use variables, you use & to combine the variables with the rest of the formula string. Example:

Sub Formula_Variable()
    Dim colNum As Long
    colNum = 4

    Range("a1").FormulaR1C1 = "=R1C" & colNum & "+R2C" & colNum

End Sub

VBA Programming | Code Generator does work for you!

Formula Quotations

If you need to add a quotation (“) within a formula, enter the quotation twice (“”):

vba formula quotations

Sub Macro2()
    Range("B3").FormulaR1C1 = "=TEXT(RC[-1],""mm/dd/yyyy"")"
End Sub

A single quotation (“) signifies to VBA the end of a string of text. Whereas a double quotation (“”) is treated like a quotation within the string of text.

Similarly, use 3 quotation marks (“””) to surround a string with a quotation mark (“)

MsgBox """Use 3 to surround a string with quotes"""
' This will print <"Use 3 to surround a string with quotes"> immediate window

Assign Cell Formula to String Variable

We can read the formula in a given cell or range and assign it to a string variable:

'Assign Cell Formula to Variable
Dim strFormula as String
strFormula = Range("B1").Formula

Different Ways to Add Formulas to a Cell

Here are a few more examples for how to assign a formula to a cell:

  1. Directly Assign Formula
  2. Define a String Variable Containing the Formula
  3. Use Variables to Create Formula
Sub MoreFormulaExamples ()
' Alternate ways to add SUM formula
' to cell B1
'
  Dim strFormula as String
  Dim cell as Range
  dim fromRow as long, toRow as long

  Set cell = Range("B1")

  ' Directly assigning a String
  cell.Formula = "=SUM(A1:A10)"

  ' Storing string to a variable
  ' and assigning to "Formula" property
  strFormula = "=SUM(A1:A10)"
  cell.Formula = strFormula

  ' Using variables to build a string 
  ' and assigning it to "Formula" property
  fromRow = 1
  toRow   = 10
  strFormula = "=SUM(A" & fromValue & ":A" & toValue & ")
  cell.Formula = strFormula
End Sub

Refresh Formulas

As a reminder, to refresh formulas, you can use the Calculate command:

Calculate

To refresh single formula, range, or entire worksheet use .Calculate instead:

Sheets("Sheet1").Range("a1:a10").Calculate

It is possible to use Excel’s ready-to-use formulas through VBA programming. These are properties that can be used with Range or Cells.


VBA Formula

Formula adds predefined Excel formulas to the worksheet. These formulas should be written in English even if you have a language pack installed.

    Range("F2").Formula = "=SUM(B2:C7)"
    Range("F3").Formula = "=SUM($B$2:$C$7)"

VBA Example Formula

Do not worry if the language of your Excel is not English because, as in the example, it will do the translation to the spreadsheet automatically.


Multiple formulas

You can insert multiple formulas at the same time using the Formula property. To do this, simply define a Range object that is larger than a single cell, and the predefined formula will be «dragged» across the range.

«Dragging» manually:

VBA Drag Manual

«Dragging» by VBA:

    Range("D2:D7").Formula = "=SUM(B2:C2)"

VBA Drag Formulas

Another way to perform the same action would be using FillDown method.

    Range("D2").Formula = "=SUM(B2:C2)"
    Range("D2:D7").FillDown

VBA FormulaLocal

FormulaLocal adds predefined Excel formulas to the worksheet. These formulas, however, should be written in the local language of Excel (in the case of Brazil, in Portuguese).

    Range("F2").FormulaLocal = "=SOMA(B2:C7)"

Just as the Formula property, FormulaLocal can be used to make multiple formulas.


VBA FormulaR1C1

FormulaR1C1, as well as Formula and FormulaLocal, also adds pre-defined Excel formulas to the spreadsheet; however, the use of relative and absolute notations have different rules. The formula used must be written in English.

FormulaR1C1 is the way to use Excel’s ready-to-use formulas in VBA by easily integrating them into loops and counting variables.

In the notations:

  • R refers to rows, in the case of vertical displacement
  • C refers to columns, in the case of horizontal displacement
  • N symbolizes an integer that indicates how much must be shifted in number of rows and/or columns
  • Relative notation: Use as reference the Range that called it

The format of the relative formula is: R[N]C[N]:R[N]C[N].

    Range("F2").FormulaR1C1 = "=SUM(R[0]C[-4]:R[5]C[-3])" 'Equals the bottom row
    Range("F2").FormulaR1C1 = "=SUM(RC[-4]:R[5]C[-3])"

When N is omitted, the value 0 is assumed.

In the example, RC[-4]:R[5]C[-3] results in «B2: C7». These cells are obtained by: receding 4 columns to the left RC[-4] from Range(«F2») to obtain «B2»; and 5 lines down and 3 columns to the left R[5]C[-3] from Range(«F2») to obtain «C7».

  • Absolute notation: Use the start of the spreadsheet as a reference

The format of the relative formula is: RNCN:RNCN.

    Range("F2").FormulaR1C1 = "=SUM(R2C2:R7C3)" 'Results in "$B$2:$C$7"

N negative can only be used in relative notation.

The two notations (relative and absolute) can be merged.

    Range("F2").FormulaR1C1 = "=SUM(RC[-4]:R7C3)" 'Results in "B2:$C$7"

VBA WorksheetFunction

Excel formulas can also be accessed by object WorksheetFunction methods.

    Range("F2") = WorksheetFunction.Sum(Range("B2:C7"))

Excel formulas can also be accessed similarly to functions created in VBA.

The formulas present in the WorksheetFunction object are all in English.

One of the great advantages of accessing Excel formulas this way is to be able to use them more easily in the VBA environment.

    MsgBox (WorksheetFunction.Sum(3, 4, 5))
    Expense=4
    MsgBox (WorksheetFunction.Sum(3, 4, 5,-Expense))

To list the available Excel formulas in this format, simply type WorksheetFunction. that automatically an option menu with all formulas will appear:

Intellisense Options



Consolidating Your Learning

Suggested Exercise



SuperExcelVBA.com is learning website. Examples might be simplified to improve reading and basic understanding. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. All Rights Reserved.

Excel ® is a registered trademark of the Microsoft Corporation.

© 2023 SuperExcelVBA | ABOUT

Protected by Copyscape

 

Здравствуйте уважаемые знатоки.
Можно ли получить результат вычисления формулы записанной в ячейки С1 т.е. (5) в VBA без использования Имен и ячейки листа

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

  • Тест.xls (26.5 КБ)

Изменено: Евгений Смирнов02.04.2021 10:54:57

 

Nordheim

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

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

Что понимается под именем ячейки?
Cells(Rowindex,Columnindex) — не подойдет?
Если же опустить имя листа, то данные будут использованы с того, который сейчас активный

«Все гениальное просто, а все простое гениально!!!»

 

Без имен книги и без ячейки
В файле эти 2 варианта сделаны

Изменено: Евгений Смирнов02.04.2021 10:51:26

 

Nordheim

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

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

Если честно, не совсем понимаю, как это вы себе представляете, взять данные из ничего?

«Все гениальное просто, а все простое гениально!!!»

 

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

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Nordheim, ага  :D
Евгений Смирнов, вам зачем? Что значит «взять значение из ячейки без ячейки»? Спросить у того, кто занёс — так, наверное
Можно файл открыть, как архив и найти в зашифрованном содержимом…

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Nordheim

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

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

#7

02.04.2021 11:23:28

Цитата
Евгений Смирнов написал:
Почему из ничего в Имя мы записываем формулу и получаем результат.

В какое имя и какую формулу? Формула возвращает имя Книги(листа, ячейки), сама формула расчитывается на листе или в коде?
Может я не совсем понял вопрос темы? Вы хотите не зная листа и ячейки получить значение формулы из этих двух неизвестных объектов так?
Или ……?

Изменено: Nordheim02.04.2021 11:27:24

«Все гениальное просто, а все простое гениально!!!»

 

Евгений Смирнов

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

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

#8

02.04.2021 11:28:10

Цитата
сама формула расчитывается на листе или в коде?

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

Изменено: Евгений Смирнов02.04.2021 11:34:44

 

sokol92

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

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

#9

02.04.2021 11:49:16

Метод

Application.Evaluate

«понимает» формулы. На данном сайте есть много замечательных сообщений от

Казанского

на эту тему.

В Вашем примере:

Код
  MsgBox Application.Evaluate("=MAX(COUNTIF('ПолучЗначФорм'!$A$1:$A$12,'ПолучЗначФорм'!$A$1:$A$12))")

Изменено: sokol9202.04.2021 13:30:08

Владимир

 

Просмотрел сообщения от

Казанского

на тему.Метод Application.Evaluate но так и не могу запихнуть формулу в метод Evaluate.
Зато увидел интересный способ заполнения массива.
Может кто-то все таки напишет как запихнуть формулу в этот метод.

 

sokol92

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

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

 

Mershik

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

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

#12

02.04.2021 14:46:57

Цитата
sokol92 написал:
‘ПолучЗначФорм’!

наверное из-за этого

Не бойтесь совершенства. Вам его не достичь.

 

sokol92

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

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

Mershik, у Вас формула из #9 для примера из #1 не работает?

 

Ігор Гончаренко

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

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

#14

02.04.2021 14:53:31

Цитата
Евгений Смирнов написал:
Может кто-то все таки напишет как запихнуть формулу в этот метод.

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

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Mershik

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

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

#15

02.04.2021 15:46:24

sokol92, работает все — я имел ввиду автор же хочет не использовать

Цитата
Евгений Смирнов написал:
без использования Имен и ячейки листа

Не бойтесь совершенства. Вам его не достичь.

 

Андрей_26

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

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

#16

02.04.2021 16:03:32

Цитата
Евгений Смирнов написал:
Можно ли получить результат вычисления формулы записанной в ячейки С1 т.е. (5) в VBA без использования Имен и ячейки листа

Можно!

P.S. какой вопрос — такой ответ )

 

doober

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

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

#17

02.04.2021 16:07:14

Вангую.

Код
Function COUNT_IF()
Count = 1
    With ActiveSheet
        dx = .Range("a1").Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 1)
    End With
    With CreateObject("scripting.dictionary")
    For n = 1 To UBound(dx)
        If .Exists(dx(n, 1)) Then
            .Item(dx(n, 1)) = .Item(dx(n, 1)) + 1
           Count = IIf(Count > .Item(dx(n, 1)), Count, .Item(dx(n, 1)))
        Else
            .Item(dx(n, 1)) = 1
        End If
    Next
     End With
COUNT_IF = Count
End Function

<#0>

 

sokol92

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

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

#18

02.04.2021 16:19:48

Цитата
Mershik написал:
автор же хочет не использовать

Я понял следующим образом пример из #1: вычислить формулу, текст которой указан в ячейке C1, не корректируя имена книги (листа) и не меняя значения ячеек.
В #9 показано, как это сделать. Результаты вычислений совпадают.

Могу ошибаться в интерпретации, хотелось бы услышать мнение автора.

Изменено: sokol9202.04.2021 16:21:40

Владимир

 

армянская народная мудрость гласит:
бросил дурак камень в воду — 100 умных достать не могут!

Изменено: Ігор Гончаренко02.04.2021 17:07:49

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Евгений Смирнов

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

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

#20

02.04.2021 17:23:37

Цитата
Я понял следующим образом пример из #1: вычислить формулу, текст которой указан в ячейке C1, не корректируя имена книги (листа) и не меняя значения ячеек

вычислить формулу, текст которой указан в ячейке C1, не используя имена(Names) книги  и  ячейки листа.
Таким оператором сразу получаем значение функции рабочего листа сумм

Код
MsgBox Application.WorksheetFunction.Sum(2, 3)

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

Код
=MAX(COUNTIF('ПолучЗначФорм'!R1C1:R12C1,'ПолучЗначФорм'!R1C1:R12C1))

Вероятно в качестве оператора нужен  Evaluate
X = Оператор(формула)
В сообщении 9 где написано <Код> там пусто.Никакого кода там нет

 

sokol92

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

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

#21

02.04.2021 17:49:39

Цитата
Евгений Смирнов написал:
Никакого кода там нет

А я вижу этот код. Обновите страницу.

Владимир

 

Что то с браузером в другом скопировал код из сообщения 9 вроде получилось
Теперь получилось Спасибо всем и лично

sokol92

Я вроде бы так пробовал но у меня почему то не получалось. Надо еще попробовать на других формулах самому
Потом отпишусь

Изменено: Евгений Смирнов02.04.2021 18:14:30

 

sokol92

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

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

Нужно иметь в виду, что при обращении к методу Evaluate адреса ячеек должны быть указаны с учетом текущего стиля ссылок (A1 или RC). В документации ошибка — упоминается исключительно стиль A1.

 

Евгений Смирнов

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

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

#24

02.04.2021 19:05:19

sokol92

Спасибо за разъяснение я пробовал ещё вчера так и у меня вылезала ошибка, поэтому подумал что неправильно что-то написал

Код
MsgBox Application.Evaluate("=MAX(COUNTIF('ПолучЗначФорм'!R1C1:R12C1,'ПолучЗначФорм'!R1C1:R12C1))")

а сейчас все посмотрел и хотел еще спросить почему лезет ошибка, а вы уже все объяснили. Оказывается стиль ссылок надо смотреть Спасибо огромное

Изменено: Евгений Смирнов02.04.2021 19:11:10

 

sokol92

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

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

#25

02.04.2021 20:13:06

Для того, чтобы не зависеть от текущего стиля ссылок и не запутаться в сложных формулах,

Казанский

разработал подход, который ниже проиллюстрирован на Вашем примере. Макрос будет работать при любом стиле ссылок (Application.Range всегда использует стиль A1).

Код
Sub Test()
 Dim s As String, rg1 As Range, rg2 As Range
 Set rg1 = Range("A1:A12")
 Set rg2 = Range("A1:A12")

 s = "=MAX(COUNTIF(%%1, %%2))" ' исходная формула, адреса диапазонов заменены на %%1, %%2
 s = Replace(s, "%%1", rg1.Address(ReferenceStyle:=Application.ReferenceStyle))
 s = Replace(s, "%%2", rg2.Address(ReferenceStyle:=Application.ReferenceStyle))
 MsgBox Evaluate(s)
End Sub

При необходимости можно использовать и другие параметры свойства

Range.Address

Владимир

 

Евгений Смирнов

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

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

#26

03.04.2021 04:48:48

sokol92

Спасибо за пример.На досуге поразбираюсь.

Понравилась статья? Поделить с друзьями:
  • Vba excel рамки ячейки
  • Vba excel рамки ячеек
  • Vba excel разъединить ячейки в excel
  • Vba excel разрывы страниц
  • Vba excel разрушительный сбой