Макрос для расчета формул в excel

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

Итог: ознакомьтесь с 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. Свойство Range.Formula (Excel)
  2. Синтаксис
  3. Замечания
  4. См. также
  5. Пример
  6. Поддержка и обратная связь
  7. VBA Excel. Вставка формулы в ячейку
  8. Свойство Range.FormulaLocal
  9. Свойство Range.FormulaR1C1Local
  10. 19 комментариев для “VBA Excel. Вставка формулы в ячейку”
  11. Как написать формулы с помощью макросов
  12. Автоматизировать написание формул
  13. Excel VBA Formulas – The Ultimate Guide
  14. Formulas in VBA
  15. Macro Recorder and Cell Formulas
  16. VBA FormulaR1C1 Property
  17. Absolute References
  18. Relative References
  19. Mixed References
  20. VBA Coding Made Easy
  21. VBA Formula Property
  22. VBA Formula Tips
  23. Formula With Variable
  24. Formula Quotations
  25. Assign Cell Formula to String Variable
  26. Different Ways to Add Formulas to a Cell
  27. Refresh Formulas
  28. VBA Code Examples Add-in

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

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

Синтаксис

expression. Формула

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

Замечания

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

См. также

Свойство Range.Formula2

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

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

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

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

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

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

Пример

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

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

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

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

Источник

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

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

Свойство Range.FormulaLocal

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

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

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

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

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

Свойство Range.FormulaR1C1Local

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

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

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

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

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

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

Привет, Nik!
Записываем формулу в ячейку «A1» , собрав ее из переменных:

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

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

Ещё раз большое спасибо за оперативность.

Здравствуйте. Помогите , пожалуйста. Возникает такая проблема: после замены части формулы с помощью функции Replace,значение в ячейке воспринимается как текст, а не как формула.
Команды

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

Здравствуйте, Сусанна!
У меня работает так:

Огромное спасибо) В понедельник приду на работу, и обязательно попробую Ваш вариант.

Добрый вечер. Мне нужно использовать математические операции, опираясь только на переменные. Например:
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») .

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

Здравствуйте!
Не совсем понял, что нужно, поэтому привожу пример, как объединить текст из двух ячеек (D1 и D2) в одну строку и как — в две:

Источник

Как написать формулы с помощью макросов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Excel VBA Formulas – The Ultimate Guide

In this Article

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:

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.

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:

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).

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.

Mixed References

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

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!

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:

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:

Formula Quotations

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

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 (“)

Assign Cell Formula to String Variable

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

Refresh Formulas

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

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

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

Источник

Get a formula from a cell using VBA in Excel.

This method returns the actual formula instead of the output value.

Get the Formula of a Cell into a Macro

We use the Formula property for this.

To get the formula in cell A1, type this in a macro:

Range("A1").Formula

5f4c85a8b3d434417958fa3c838b85a7.jpg

I will put MsgBox in front of this line of code so we can see the output in Excel:

MsgBox Range("A1").Formula

Go back to Excel and run it on a cell that has a date and this is the result:

9fd379c46222835b5be956c846f42cc6.jpg

In cell A1, you can see the actual visible output, which is the date, and in the message box pop-up you can see the formula that was used to create the output.

Using Formula in VBA means that the macro will get the formula that we see in the message box.

Notes

This is pretty straightforward, if you want to get the value of a cell that is easy and you can read about it in the link.

Download the attached workbook to see this example in Excel.


Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Similar Content on TeachExcel

Get Text from Comments in Excel Including the Author of the Comment — UDF

Macro: Output all text from a cell comment, including comment author, with this UDF in Excel. Thi…

Loop through a Range of Cells in Excel VBA/Macros

Tutorial: How to use VBA/Macros to iterate through each cell in a range, either a row, a column, or …

Limit the Total Amount a User Can Enter into a Range of Cells in Excel

Tutorial: How to limit the amount that a user can enter into a range of cells in Excel.  This works…

Me Keyword in Excel Macros & VBA

Tutorial: The Me keyword in Excel VBA allows you to refer to either the current worksheet, workbook,…

Select Ranges of Cells in Excel using Macros and VBA

Tutorial: This Excel VBA tutorial focuses specifically on selecting ranges of cells in Excel.  This…

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons

50+ Hours of Video

200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

mor_sergey

77 / 11 / 0

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

Сообщений: 828

1

Формула эксель через макрос

08.08.2018, 14:51. Показов 16096. Ответов 36

Метки нет (Все метки)


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

toiai, ребята знающие, подскажите пожалуйста…..как такую формулу сделать програмно…в макрос.

Код

=(СУММЕСЛИ(D6:AH6;">0";D6:AH6)-СУММЕСЛИ(D6:AH6;"<0";D6:AH6))-$CR$5

вот что получается:

Visual Basic
1
2
      .Formula = _
        "=sumif(" & Range(Cells(a, bn), Cells(a, bk)).Address(0, 0) & ","">0"")-sumif(" & Range(Cells(a, bn), Cells(a, bk)).Address(0, 0) & ",""<0"")"

написать все что в больших скобках получилось…не знаю как из всего этого вычесть содержимое ячейки. как граммотно применить «Address(0, 0)»? спасибо за советы



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

08.08.2018, 14:51

Ответы с готовыми решениями:

Макрос для Эксель
Добрый день, мне нужна помощь с написанием одного макроса, суть в чем:
есть много типовых таблиц,…

Макрос эксель. Фильтровка
Люди плиз, как сделать по событию перехода на второй лист, что бы автофильтр был равен автофильтру…

Макрос для таблицы эксель с поиском
Привет, помогите, очень-очень срочно
В эклеле таблица: номер документа, фамилия препода, оценка по…

Макрос на сохранение двух листов эксель в отдельные файлы mht
Здравствуйте, как сделать что бы эксель 2003 сохранял выбранные листы (Лист1 и Лист2) в отдельные…

36

Ruella

471 / 161 / 79

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

Сообщений: 377

08.08.2018, 16:11

2

mor_sergey, честно говоря, непонятно, при чем тут Address… А может, я вообще задачу не понимаю Так что не судите строго
Но если брать в расчет Вашу верхнюю формулу, то:
1. Если хотите в какую-то ячейку поместить результат данной формулы, то попробуйте так

Visual Basic
1
2
3
With ThisWorkbook.Sheets("Лист1")
    .Range("A1") = (Application.SumIf(.Range("D6:AH6"), ">0") - Application.SumIf(.Range("D6:AH6"), "<0")) - .Range("$CR$5")
End With

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

Visual Basic
1
2
3
With ThisWorkbook.Sheets("Лист1")
    .Range("A2").FormulaLocal = "=(СУММЕСЛИ(D6:AH6;"">0"")-СУММЕСЛИ(D6:AH6;""<0""))-$CR$5"
End With



1



77 / 11 / 0

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

Сообщений: 828

08.08.2018, 16:19

 [ТС]

3

Ruella, спасибо большое за отклик, попробую еще раз….но мне нужно параметрически сделать….таблица генерироваться по-разному будет….и привязать нужно формулу к ячейкам. cells(1,1).Address в дебагпринте пишет именно адрес ячейки и основную часть формулы таким способом перенесли (делал не я), не пойму как грамотно то же самое сделать, но с одной ячейкой…вычесть из того, что уже написано



0



Ruella

471 / 161 / 79

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

Сообщений: 377

08.08.2018, 16:31

4

mor_sergey, все равно мало что поняла Но что, если для конечной ячейки Вам попробовать просто что-то вроде

Visual Basic
1
cells(нужная_ячейка).Address()

Все равно не срабатывает?



1



77 / 11 / 0

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

Сообщений: 828

08.08.2018, 16:34

 [ТС]

5

тип мис меч пишет) не соответствие типо…я так пробывал, только без адрес без скобок в конце



0



Ruella

471 / 161 / 79

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

Сообщений: 377

08.08.2018, 16:47

6

mor_sergey, ну, не знаю… Я попробовала так (заменила в вышеуказанном только ссылку на последнюю ячейку, остальное оставила):

Visual Basic
1
2
3
4
5
Dim My As Range
With ThisWorkbook.Sheets("Лист1")
Set My = .Range("CR5")
    .Range("A1").FormulaLocal = "=(СУММЕСЛИ(D6:AH6;"">0"")-СУММЕСЛИ(D6:AH6;""<0""))-" & My.Address()
End With

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



1



mor_sergey

77 / 11 / 0

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

Сообщений: 828

08.08.2018, 20:21

 [ТС]

7

Ruella, синтаксис……незнал как написать…Вы мне дали на водку) все работает

Visual Basic
1
2
.Range(Cells(a, i_col), Cells(i_count - 1, i_col)).Formula = _
                "=sumif(" & Range(Cells(data_row, beg_data_col), Cells(data_row, end_data_col)).Address(0, 0) & ","">0"")-sumif(" & Range(Cells(data_row, beg_data_col), Cells(data_row, end_data_col)).Address(0, 0) & ",""<0"") - " & Cells(data_row, end_data_col + 1).Address



0



1813 / 1135 / 346

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

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

09.08.2018, 07:01

8

А я НЕ ЗНАЛ, что НА ВОДКУ должен давать тот, который помогает, казалось бы надо наоборот.
Может имелось ввиду наводку?



1



77 / 11 / 0

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

Сообщений: 828

09.08.2018, 07:50

 [ТС]

9

Burk, как всегда острите….. Оговорочка по Фрейду. Так было задумано



0



77 / 11 / 0

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

Сообщений: 828

13.08.2018, 12:42

 [ТС]

10

Ruella, не могу придумать как посчитать сумму последовательных(друг за другом идущих) закрашенных ячеек в строке и если она >42, то действие (какое не придумал)

если функцией, то как применить в коде

Спасибо



0



471 / 161 / 79

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

Сообщений: 377

13.08.2018, 16:40

11

mor_sergey, а можно немножко поконкретнее? что значит «закрашенных ячеек» и «идущих подряд» (по строкам, по столбцам или еще как)? В общем, огласите задачу целиком, плиз



1



77 / 11 / 0

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

Сообщений: 828

13.08.2018, 16:47

 [ТС]

12

Ruella, хочу чтобы контроллировались часы работы……
например график чела 11 11 11 11 (44 часа), должно быть условие, если > 43, обязательно два выходных

Миниатюры

Формула эксель через макрос
 



0



471 / 161 / 79

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

Сообщений: 377

13.08.2018, 21:06

13

mor_sergey, все равно вопросы остаются К примеру, это правило должно работать для каждой строки, или только для тех, где график = 11 ? Это должно проставляться автоматически — или самостоятельно вручную, просто на каком-то этапе приложение должно подсказать: «Товарищ дорогой, ты что-то слишком разошелся, самое время поставить выходной»? Это должно быть сделано макросом, формулами или вообще чем-то вроде УФ? В общем, накидала (так, как поняла) один из возможных вариантов макросом (поскольку тема в VBA), вдруг опять получится «дать на водку» В общем, если чего не так — подробнее уточняйте задание, а для начала то, что получилось:



1



77 / 11 / 0

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

Сообщений: 828

13.08.2018, 21:27

 [ТС]

14

Ruella, Здорово…но Вы правы:1. правило должно работать для каждой строки (для каждого человека) 2. таблица заполняется вручную и если больше нормы, то либо подсказка, либо может подсказка+ невозможность еще часов добавить…
3 зашито в код должно быть конечно.макросами

на картинке моей(скриншоте) видно, что доп графа есть….норма рабочей смены…….8 и 11 ч



0



77 / 11 / 0

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

Сообщений: 828

13.08.2018, 22:17

 [ТС]

15

Ruella, вставил Ваш код….все просчитывает, но в конце division by zero и указывает на
k = (43 Cells(CRow.row, 4)) + 1

а вообще нужно как в #14

Миниатюры

Формула эксель через макрос
 



0



77 / 11 / 0

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

Сообщений: 828

14.08.2018, 11:52

 [ТС]

16

Ruella,

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

но в конце division by zero и указывает на

исправил…нижняя граница была со смещением на строку…

Добавлено через 4 часа 10 минут
Ruella, голову сломал…не могу Вашу процедуру приспособить для автоматического подсчета…не с кнопки, а с листа….в активацию листа наверное ее нужно и что- то изменить. Подскажите пожалуйста… Заполняет конечно юзер все



0



471 / 161 / 79

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

Сообщений: 377

14.08.2018, 11:58

17

mor_sergey, ну, это смотря что Вы хотите. Имеет ли смысл запускать всю эту перерисовку при каждой активации листа? или даже при каждом открытии книги? Если принудительный запуск неудобен, то попробуйте подобрать более подходящее событие — например, при изменении каких-то конкретных ячеек на листе (каких именно — Вам виднее)



1



77 / 11 / 0

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

Сообщений: 828

14.08.2018, 12:02

 [ТС]

18

именно…при изменении только рабочей области(без шапки и расчетных ячеек разумеется). Какие коррективы в код внести, чтобы макрос не сам заполнял, а считал то, что заполняет человек

Добавлено через 14 секунд
Ruella,



0



471 / 161 / 79

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

Сообщений: 377

14.08.2018, 12:17

19

mor_sergey, я уже малость запуталась можете пояснить, что конкретно он должен делать? Считать — а что именно? и что он должен делать потом?



1



77 / 11 / 0

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

Сообщений: 828

14.08.2018, 12:31

 [ТС]

20

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

Немного переделать Ваш код нужно….не соображу как спасибо Вам за помощь



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

14.08.2018, 12:31

Помогаю со студенческими работами здесь

Макрос создания нового листа в Эксель с названием от 1 и далее нарастающим итогом
Добрый вечер! Очень нужна помощь, уважаемые программисты!!!
Необходим макрос для кнопки, при…

Спасите, пожалуйста, создать макрос, который запишет темы писем в Эксель
Помогите, пожалуйста, создать макрос, который запишет темы писем в Эксель.
Я вот никак, смогла…

Нужен макрос, который загрузит в эксель выбранное количество ТХТ файлов на лист
Добрый день!
Прошу помочь.
Есть n ТХТ файлов.
Нужен макрос, который загрузит в эксель выбранное…

Формула или макрос
Добрый день, может быть у кого-то есть готовое решение или подскажете как сделать такую процедуру….

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

20

Добрый день.
Я пытаюсь создать макрос. Суть: выбираешь ячейку, активируешь макрос, получаешь вычисление в выделенной ячейке.

Какие исходные данные:

-Статичное число — указывается мной вручную. Для примера возьмём ячейку E5.
-Множитель, на который умножаем статичное число — указывается мной вручную. Для примера возьмём ячейку C9.
-Текущий результат — при активации макроса вычисляется числовое значение. Для примера возьмём ячейку E9.
-Предыдущий результат — при активации макроса сюда переносится предыдущее значение ячейки E9. Для примера возьмём ячейку D9.

Мне, нужно:

1) чтобы при активации макроса вычисления происходили в выделенной ячейке и к текущему результату ячейки прибавлялся (а не заменялся) результат вычислений (например, в момент активации макроса выделена ячейка E9. К числу, которое в ячейке E9, прибавляется 5000. При повторной активации макроса — ещё прибавляется 5000. В ячейку E9 должно скопироваться число, а не формула);

2) чтобы в ячейку со смещением на 1 столбец влево от выделенной ячейки вносилось предыдущее значение, которое было в выделенной ячейке до активации макроса (например, в момент активации макроса выделена ячейка E9. В ячейку D9 копируется результат, который был в ячейке E9 до активации макроса);

3) чтобы определенные параметры макроса были динамическими — чтобы значения в формуле менялись относительно выделенной ячейки (например, если выделена ячейка E9, то вычисления осуществляются по формуле «=D9+$E$5*C9». Если выделена ячейка E10 — по формуле «=D10+$E$5*C10». Если выделена ячейка E11 — по формуле «=D11+$E$5*C11». Т.е. положение ячейки «Множитель, на который умножаем статичное число» и «Предыдущий результат» меняется относительно выделенной ячейки, а «Статичное число» — нет).

С первым пунктом я справился, а со вторым и третьим — нет.

Пока что макрос выглядит следующим образом:

[vba]

Код

Sub Kucherov()
  With Range(«E9»)
    .Formula = «=D9+E5*C9»
    .Value = .Value
  End With
  Range(«E9»).Select
    Selection.Copy
    Range(«D9»).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

[/vba]

Помогите пожалуйста с макросом. Какой макрос должен получиться в итоге?

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