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

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

Вставка формулы со ссылками в стиле 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 одинаковы, их можно вставить сразу, без использования цикла, во весь диапазон.


 

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

=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)"
 

Юрий М

Модератор

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

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

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

 

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

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 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
тоесть в зависимости от номера строки
вот как то так возможно? причем макрос один и тот же.

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 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

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

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 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

Вставить формулу на лист средствами 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,​ некоторые ячейки формулы.​
​ , спасибо заранее)))​ английском.​

​ & i &​​ActiveCell.FormulaR1C1Local = «=СУММ(RC[-31];RC[-30])»​superpsih​ работать.​
​макрос срабатывает по​​: DSH,​​: и да… вот​: имхо, через​ от локали офиса?​

​: А, точно​​Вариант​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​ понял как вставить​ поэтому написал код:​

planetaexcel.ru

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​ сей феномен… но​

CyberForum.ru

Вставка формулы в ячейку (Макросы/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​

excelworld.ru

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

​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​​Мне кажется нужно​

​ Macro)​

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

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

​: …​

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

CyberForum.ru

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

​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​

CyberForum.ru

​ автору темы нужна​

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

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

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


Перенос формул в макрос

anisimovaleksandr32

Дата: Понедельник, 25.01.2021, 12:44 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 40

Добрый день многоуважаемые форумчане!
Помогите с решением
В таблице в столбце 13 таблицы есть формула:

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

Аналогичная ситуация происходит и в двух других моих решениях
В столбце 14 данной таблице
И в ЗАКЛЮЧЕНИИ под таблицей…

Помогите пжл решить данные проблемы

[admin]Эта тема изначально не являлась готовым решением, но стала таковой в процессе решения задачи ТС
Универсальный макрос по переносу формул из ячеек листа в код VBA в сообщении № 17

К сообщению приложен файл:

7090601.xlsm
(81.0 Kb)

 

Ответить

Gustav

Дата: Понедельник, 25.01.2021, 15:35 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

У Вас в коде пропал фрагмент формулы! Как корова языком слизала, а точнее — похоже, макрорекордер шалит не по-детски :(
Переводя на человеческий формат формулы (не R1C1), это средний коротенький фрагмент:
[vba]

Код

=ЕСЛИ(И(S18=»Раствор»;СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=»Раствор»;СЧЁТ(N31:N36)>3);»Только 3-и образца»;ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/
4);2);ЕСЛИ
(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))

[/vba]
Вот этого фрагмента (в формате R1C1) и нет в Вашем макросе:
[vba][/vba]
И теперь если этот фрагмент (уже в формате R1C1)
[vba][/vba]
аккуратненько вставить в макрос в начало второй строки после переноса формулы на новую строчку:
[vba]

Код

Sub Макрос1()
    Range(«O31:O36»).Select
    ActiveCell.FormulaR1C1 = _
        «=IF(AND(R[-13]C[4]=»»Раствор»»,COUNT(RC[-1]:R[5]C[-1])=3),AVERAGE(RC[-1]:R[5]C[-1]),IF(AND(R[-13]C[4]=»»Раствор»»,COUNT(RC[-1]:R[5]C[-1])>3),»»Только 3-и образца»»,IF(COUNT(RC[-1]:R[5]C[-1])>5,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1)-SMALL(RC[-1]:R[5]C[-1],2))/4),2),IF(COUNT(RC[-1]:R[5]C[-1])=5,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/» & _
        «4),2),IF(COUNT(RC[-1]:R[5]C[-1])=4,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/3),2),IF(COUNT(RC[-1]:R[5]C[-1])=3,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/2),2),IF(COUNT(RC[-1]:R[5]C[-1])<=2,ROUND(AVERAGE(RC[-1]:R[5]C[-1]),2),)))))))»
End Sub

[/vba]
то всё волшебным образом заработает!


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал GustavПонедельник, 25.01.2021, 15:48

 

Ответить

lebensvoll

Дата: Понедельник, 25.01.2021, 17:20 |
Сообщение № 3

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

Gustav, спасибо огромное за ответ!!!

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

Цитата

похоже, макрорекордер шалит не по-детски

а счем это может быть связано (((( и можно ли это устранить (((( ведь у меня еще два кода есть которые получаются тоже записываются (((( не правильно (((((


Кто бы ты ни был, мир в твоих руках

 

Ответить

Gustav

Дата: Понедельник, 25.01.2021, 18:24 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

а счем это может быть связано (((( и можно ли это устранить

А фиг знает… честно говоря, сам первый раз с таким сталкиваюсь… И поэтому я бы советовал в данном случае не пользоваться макрорекордером, а создавать формулы с помошью свойства FormulaLocal объекта Range. Преимущество, в первую очередь, состоит в том, что Вы берете за основу формулу в ее, так сказать, естественном виде, в котором она отображается в окне формул (ну, если только, конечно, Вы не ярый фанат адресации R1C1). Сопровождать формулу в таком естественном виде значительно проще, чем в формате R1C1. Пожалуй, при этом единственное, но вполне преодолимое, неудобство заключается в необходимости удвоения в коде VBA двойных кавычек, если таковые имеются в формуле.

В качестве узелка на память предложу примерную схему преобразования текста формулы из ячейки — в макрос VBA, воссоздающий эту формулу в той же ячейке.

1. Копируем текст формулы в Блокнот (Notepad) и разбиваем на несколько строк примерно равной длины. Разбивать можно в любом месте, хоть посредине функции — это нестрашно:
[vba]

Код

=ЕСЛИ(И(S18=»Раствор»;СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=»Раствор»;СЧЁТ(N31:N36)>3);
«Только 3-и образца»;ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-
НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))
/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;
ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))

[/vba]
2. Далее в Блокноте же в получившемся текстовом фрагменте удваиваем все двойные кавычки. Т.е. вызываем окно замены по Ctrl+H и указываем Что: » и Чем: «» :
[vba]

Код

=ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)>3);
«»Только 3-и образца»»;ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-
НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))
/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;
ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))

[/vba]
3. Далее в Блокноте же в начало каждой строки вставляем фрагмент: strFormula = strFormula & » (включая двойную кавычку), а в конец каждой строки — одну двойную кавычку » (чтобы закрыть строку):
[vba]

Код

strFormula = strFormula & «=ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)>3);»
strFormula = strFormula & «»»Только 3-и образца»»;ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-«
strFormula = strFormula & «НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))»
strFormula = strFormula & «/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;»
strFormula = strFormula & «ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))»

[/vba]
4. Далее дописываем несколько операторов VBA — ДО и ПОСЛЕ фрагмента — и получаем законченную работоспособную процедуру:
[vba]

Код

Sub Macro1
    Dim strFormula As String

    strFormula = strFormula & «=ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)>3);»
    strFormula = strFormula & «»»Только 3-и образца»»;ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-«
    strFormula = strFormula & «НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))»
    strFormula = strFormula & «/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;»
    strFormula = strFormula & «ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))»

    Range(«O31»).FormulaLocal = strFormula
End Sub

[/vba]


МОИ: Ник, Tip box: 41001663842605

 

Ответить

lebensvoll

Дата: Понедельник, 25.01.2021, 18:51 |
Сообщение № 5

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

Gustav, СПАСИБО за такой подробнейший подход к записи
Я делал грубо.
1. Формулы и так создавались с трудом и долго правились и поправлялись
2. В VBA я не силен (((( форум во многом помогал. Но я эту процедуру делал так:
копировал формулу
вставал на нужную ячейку, включал «запись» и вставлял скопированную формулу, останавливал запись и потом уже получишвийся код-формулу подставлял куда нужно.
Если во многом формулы так получались на ура. То именно с этими тремя формулами возникали проблемы ((((
Буду пробовать Ваше предложенное

Но у меня же будет не одна формула а много их ((((

СПАСИБО ВАМ ОГРОМНЕЙШЕЕ


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvollПонедельник, 25.01.2021, 18:53

 

Ответить

RAN

Дата: Понедельник, 25.01.2021, 18:55 |
Сообщение № 6

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Но все преимущество FormulaLocal сводится на нет одной строчкой
[vba][/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

Gustav

Дата: Понедельник, 25.01.2021, 19:18 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1


В чём подвох? Вроде, формула автоматически нормально протягивается в этом диапазоне (если об этом)…


МОИ: Ник, Tip box: 41001663842605

 

Ответить

RAN

Дата: Понедельник, 25.01.2021, 20:33 |
Сообщение № 8

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Протягивается, а не вставляется.


Быть или не быть, вот в чем загвоздка!

 

Ответить

lebensvoll

Дата: Среда, 27.01.2021, 21:31 |
Сообщение № 9

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

:'( :'( :'(
ААААААААААААААААА блин ну почемууууу ну что не так то :'( :'( :'(
ПОМОГИТЕ ПЖЛ с решением!!!
Сев за другой комп у меня получилось произвести запись через Macro Recorder

НО стал записывать следующую формулу ((((( терплю не удачу за неудачей
И разбил формулу как предложил Gustav,

Но все равно ругается :'( и производил запись перебиванием формулы в ручную шаг за шагом и все равно не удачи :'(
Где мои ошибки почему так происходит
Сама формула:

К сообщению приложен файл:

3868329.xlsm
(84.1 Kb)


Кто бы ты ни был, мир в твоих руках

 

Ответить

gling

Дата: Четверг, 28.01.2021, 00:19 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

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

К сообщению приложен файл:

9898101.xlsm
(85.2 Kb)


ЯД-41001506838083

 

Ответить

lebensvoll

Дата: Четверг, 28.01.2021, 00:27 |
Сообщение № 11

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

gling, Спасибо Вам за ответ…
А если я создам «Имена», другие мои макросы не потеряют свою функциональность!?
Я за этим доком уже сижу неделю наверное ((((
То вначале в формулах находишь ошибки — правишь — записываешь макрос
То потом на работе сотрудники либо что то предумают или заметят ошибку и вновь пункт 1 :'(
Если сейчас еще и это проблема случится (пусть она возможно даже и не получится но еще и потеряют функциональность другие макросы с формулами) это будет АААААААА


Кто бы ты ни был, мир в твоих руках

 

Ответить

gling

Дата: Четверг, 28.01.2021, 00:31 |
Сообщение № 12

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

А какая связь между именами и макросами которые не обращаются к новому имени?


ЯД-41001506838083

 

Ответить

lebensvoll

Дата: Четверг, 28.01.2021, 00:34 |
Сообщение № 13

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

Связь что они обращаются к ячейке а это ячейка имеет ИМЯ (и получится что два имени примерно G31 и втрое его имя стало «к примеру: цен»).

 

Ответить

gling

Дата: Четверг, 28.01.2021, 00:40 |
Сообщение № 14

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

Одинаковых имен у вас не будет, а обращаться по имени в Excel это нормально, конфликтов быть не должно.


ЯД-41001506838083

 

Ответить

lebensvoll

Дата: Четверг, 28.01.2021, 00:53 |
Сообщение № 15

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

понял спасибо будем учиться ((((

 

Ответить

Gustav

Дата: Четверг, 28.01.2021, 19:55 |
Сообщение № 16

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

И разбил формулу как предложил Gustav,

lebensvoll, очень грустно, но Вы совсем не «вкурили» мой алгоритм из сообщения #4 и, извините, прёте своим первоначально проторенным путём… :(
Прочтите мой алгоритм еще раз внимательно, если действительно хотите успеха в этом деле.

Кстати, я нигде не упоминаю про делёжку строки по последовательности символов «& _» в конце строки (как это делает макрорекордер). Потому что при этом существует ограничение — не больше 25 строк. И оно нам не надо. Тем более, мы выяснили, что при таком подходе как раз и пропадают символы на «сгибах» формулы!

У меня же строки объединяются с помощью начальных фрагментов «strFormula = strFormula & «. И таким способом можно легко объединить не то, что 25 — 100 строк или даже 500.

И делайте всё препарирование формулы в Блокноте! В редакторе VBA среда будет пытаться автоматически подставлять, например, завершающие кавычки. Нам не нужно такой сомнительной услужливости а-ля «словарь T9» в телефоне. В редактор VBA возвращайтесь только на 4-м шаге алгоритма, когда формула уже корректно разбита по отдельным строкам. Ну, я же всё написал…


МОИ: Ник, Tip box: 41001663842605

 

Ответить

Gustav

Дата: Пятница, 29.01.2021, 10:53 |
Сообщение № 17

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

Вот, чтобы не пыхтеть вручную в Блокноте и не делать походу случайных ошибок, написал на коленках макрос-визард, реализующий алгоритм из моего сообщения #4.
Макрос выводит в Окно отладки (Ctrl+G в редакторе VBA, если не открыто) текст макроса по созданию формулы из указанной ячейки (ее адрес указывается в константе INS_FORM_ADR визарда). Соответственно, копируете этот текст из Окна отладки, вставляете в модуль книги и запускаете.
В макросе-визарде parseFormulaIntoMacro по желанию можно заменить .FormulaLocal на .FormulaR1C1 (или на любую другую: .Formula или .FormulaR1C1Local).


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал GustavПятница, 29.01.2021, 10:59

 

Ответить

Gustav

Дата: Пятница, 29.01.2021, 12:06 |
Сообщение № 18

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1


Серж, я как молодой писатель о большем и мечтать не могу! :D Главное, чтобы ТС, когда проснётся, смог найти эту свою тему. Кстати, надо отдать ему должное, название у темы очень удачное — по сути и никакой воды! :up:


МОИ: Ник, Tip box: 41001663842605

 

Ответить

RAN

Дата: Пятница, 29.01.2021, 12:31 |
Сообщение № 19

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

№ 17 делает тему весьма интересной и полезной для готовых решений.
Но неплохо было бы это как-то указать в самом начале, а то могут и не дочитать до самого главного. <_<


Быть или не быть, вот в чем загвоздка!

 

Ответить

lebensvoll

Дата: Пятница, 29.01.2021, 12:57 |
Сообщение № 20

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

Gustav, Спасибо за ответ и еще раз пояснения.
Просто сев за другой комп у меня получилось произвести запись Macro Recorder

Цитата

В таблице в столбце 13 таблицы есть формула:

как раз на ура и последующие также.
А вот с выводом и применение я уже нашел просто в просторах инета такое решение (но смысл один разбить формулу) ну а за то что только 25 строк (((( я только узнал
Применение Вашего метода для меня показалось сложным и не стал использовать (я просто не смог сообразить а как мне потом это воткнуть в свои коды)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvollПятница, 29.01.2021, 13:00

 

Ответить

mor_sergey

77 / 11 / 0

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

Сообщений: 828

1

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

08.08.2018, 14:51. Показов 16090. Ответов 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

Понравилась статья? Поделить с друзьями:
  • Как вставить формулу в документ ms word 2007
  • Как вставить фигуру в ячейку excel
  • Как вставить формулу в документ microsoft word
  • Как вставить формулу в график excel
  • Как вставить формулу в word если формула не активна