На чтение 4 мин. Просмотров 33.2k.
Итог: ознакомьтесь с 3 советами по написанию и созданию формул в макросах VBA с помощью этой статьи и видео.
Уровень мастерства: Средний
Автоматизировать написание формул
Написание формул может быть одной из самых трудоемких частей
вашей еженедельной или ежемесячной задачи Excel. Если вы работаете над
автоматизацией этого процесса с помощью макроса, вы можете попросить VBA
написать формулу и ввести ее в ячейки.
Поначалу написание формул в VBA может быть немного сложнее,
поэтому вот три совета, которые помогут сэкономить время и упростить процесс.
Совет № 1: Свойство Formula
Свойство Formula является членом объекта Range в VBA. Мы можем использовать его для установки / создания формулы для отдельной ячейки или диапазона ячеек.
Есть несколько требований к значению формулы, которые мы устанавливаем с помощью свойства Formula:
- Формула представляет собой строку текста, заключенную в кавычки. Значение формулы должно начинаться и заканчиваться кавычками.
- Строка формулы должна начинаться со знака равенства = после первой кавычки.
Вот простой пример формулы в макросе.
Sub Formula_Property() ' Формула представляет собой строку текста, заключенную в кавычки ' Начинается со знака = Range("B10").Formula = "=SUM(B4:B9)" End Sub
Свойство Formula также можно использовать для чтения существующей формулы в ячейке.
Совет № 2: Используйте Macro Recorder
Если ваши формулы более сложные или содержат специальные
символы, их будет сложнее написать в VBA. К счастью, мы можем использовать
рекордер макросов, чтобы создать код для нас.
Вот шаги по созданию кода свойства формулы с помощью средства записи макросов.
- Включите средство записи макросов (вкладка «Разработчик»> «Запись макроса»)
- Введите формулу или отредактируйте существующую формулу.
- Нажмите Enter, чтобы ввести формулу.
- Код создается в макросе.
Если ваша формула содержит кавычки или символы амперсанда, макрос записи будет учитывать это. Он создает все подстроки и правильно упаковывает все в кавычки. Вот пример.
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 одинаковы, их можно вставить сразу, без использования цикла, во весь диапазон.
Вставить формулу на лист средствами 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, не умеют работать повторно активировать формулу
— всегда берется
: Саш, а ты что записал рекордер. макросов.. в тоПрошу помощи! мере заполнения которойkai1337Hugo121 «: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, рабочий код который
FormulaR1C1ikkiну, тогда по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() Forsuperpsih
ячейку следующим образом: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,buchlotnikEnd 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 EndFormulaR1C1Local = «=ЕСЛИ(ЕОШИБКА(ВПР(RC2;Данные!C1:C2;2;ЛОЖЬ));»»»»;ВПР(RC2;Данные!C1:C2;2;ЛОЖЬ))» макросов.. в тоLightZikki кавычки я вниманияХотя самый оптимальный абсолютный адресами ячеек.Сервис(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
, необходимо использовать Если его заменить
: …
вот часть кода
DSHFormulaR1C1 = «=IF(ISERROR(VLOOKUP(RC2,Данные!C1:C2,2,FALSE)),»»»»,VLOOKUP(RC2,Данные!C1:C2,2,FALSE))» последующего анализа данные — хоть убей,
CyberForum.ru
Макрос, вставляющий формулу в ячейку
LightZThe 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
автору темы нужна
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
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:
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 — 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 — 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
Подскажите, пожалуйста, как вставить формулу в ячейку с помощью макроса?
Попробовал вот так вот
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