nr = Range("C5", Range("C5").End(xlDown)).Rows.Count
Range("K6").AutoFill Range("K6:K" & nr)
не то форматирование применил, сорри
Изменено: Евгений Квитницкий — 13.03.2013 20:58:44
Юрий М
Модератор
Сообщений: 60575 Регистрация: 14.09.2012
Контакты см. в профиле
Вставляете код — отключайте смайлы.
Никаких идей, по вопросу выше ?
Sergei_A
Пользователь
Сообщений: 443 Регистрация: 05.01.2013
#4
14.03.2013 08:53:06
Попробуйте на пустом листе мою незамысловатую формулу протянуть.
Код
Sub formula()
'подготовим что считать
For i = 1 To 10
Cells(i, 2) = i: Cells(i, 3) = i + 20
Next
'протянем формулу
For i = 1 To 10
Cells(i, 1).Activate
'именно ActiveCell
ActiveCell = "=$B" & i & "+$C" & i
Next
End Sub
Kuzmich
Пользователь
Сообщений: 7998 Регистрация: 21.12.2012
Попробуйте
Range.FillDown
копирует содержимое и форматирование из верхней строки в остальные строки диапазона Range
RAN
Пользователь
Сообщений: 7091 Регистрация: 21.12.2012
#6
14.03.2013 12:48:06
Цитата
Евгений Квитницкий пишет: надо макросом протянуть формулу. и именно ActiveCell вместо Range
Хитро вопрос сформулирован. И где в ФОРМУЛЕ ActiveCell ? А если надо поместить формулу «=IFERROR(VLOOKUP(RC[-9],StandDB!C[-10]:C[21],11,0),»»»»)» в столбец, то
Я не знаю в каком именно столбце будет эта формула. ячейка, в какую надо вписать формулу и протянуть вниз(на неопределенное заранее кол-во строк) расчитывается по условию offset от найденой необходимой ячейки. Это может быть как С1 так и F12 и тд пример прилагается
Изменено: Евгений Квитницкий — 15.03.2013 00:39:24
Sergei_A
Пользователь
Сообщений: 443 Регистрация: 05.01.2013
#8
14.03.2013 16:12:04
Выделяете ячейку с формулой и запускаете макрос
Код
Sub formula()
LR = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
With ActiveCell
.AutoFill Destination:=.Resize(LR - .Row + 1, 1), Type:=xlFillDefault
End With
End Sub
Евгений Квитницкий
Пользователь
Сообщений: 212 Регистрация: 01.01.1970
#9
14.03.2013 16:30:54
Sergei_A, спасибо большое, именно то что надо.
Изменено: Евгений Квитницкий — 14.03.2013 16:31:11
Протягивание формулы до последней строки с данными в макросе
01.07.2011, 14:33. Показов 27586. Ответов 12
Метки нет (Все метки)
Добрый день!
Создала макрос через «Запись макроса»
Мне нужно протянуть несколько формул по столбцу до последней строки с данными.
Макрос записал протягивание только до конкретной ячейки. Так как в отчете каждый раз меняется количество строк, я не могу указать в макросе конкретную ячейку до которой будут заполняться формулы.
Как это исправить?
Но у меня после 9 столбца идут данные, и в 13 столбце ещё колонка с формулой.
Как можно делать так, чтобы он потом протягивал ещё и 13 колонку вниз?
Когда указываю
то он и колонки с 9 по 12 протягивает вниз(то есть проставляются данные, которые находятся во 2 строке)
0
Поц
-1 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 8
16.10.2018, 19:40
7
Visual Basic
1
2
3
4
5
Dim a, s **
a = Range("e" & Cells(Rows.Count, 5).End(xlUp).Row).Address **
s = a & ":" & Range("e" & Cells(Rows.Count, 1).End(xlUp).Row).Address **
OnErrorResumeNext **
* *Range(a).AutoFill Destination:=Range(s), Type:=xlFillDefault **
0
ᴁ®
3069 / 1735 / 361
Регистрация: 13.12.2016
Сообщений: 5,937
Записей в блоге: 4
16.10.2018, 22:11
8
Поц, Это VBA? или вы …. Поц
0
0 / 0 / 0
Регистрация: 17.01.2019
Сообщений: 14
18.01.2019, 13:21
9
Почему-то процесс идет некорректно, VBA выдает сообщение: Application-time error ‘1004’ Application-defined or object-defined error. И проблемным содержимым выделяется строка, содержащая: Endrow = Cells.Find(«*», , , , xlByRows, xlPrevious).Row. Если же проверку выключить командой On Error Resume Next, то процесс вообще зависает.
0
15136 / 6410 / 1730
Регистрация: 24.09.2011
Сообщений: 9,999
18.01.2019, 13:50
10
Nik Toiler, приложите файл-пример со своей задачей. Возможно, этот метод поиска последней строки и не нужен.
0
0 / 0 / 0
Регистрация: 17.01.2019
Сообщений: 14
18.01.2019, 15:40
11
Теперь VBA пишет, что макросы отключены….
0
0 / 0 / 0
Регистрация: 17.01.2019
Сообщений: 14
18.01.2019, 15:43
12
Теперь VBA пишет, что макросы отключены.
0
15136 / 6410 / 1730
Регистрация: 24.09.2011
Сообщений: 9,999
18.01.2019, 19:29
13
Nik Toiler, у меня Find работает без ошибок, Endrow = 9.
Ошибка «макросы отключены» на строке Application.Run «Copy» вызвана тем, что в проекте два модуля с одинаковым кодом, в обоих есть процедура «Copy», и приложение не знает, какую из них выполнять.
Кстати можно просто Copy , тогда будет вызвана процедура из этого же модуля.
На листе всегда динамическое количество строк. Мне необходимо протянуть формулу до последней заполненной строчки. При записи макрокодером макрос записывает статическое количество строк. Как сделать так, чтобы протяжка формулы происходила до последней строчки с данными?
Пример макроса
Attribute VB_Name = «Module10» Sub Вопрос() Attribute Вопрос.VB_ProcData.VB_Invoke_Func = » n14″ ‘ ‘ Вопрос Макрос ‘
‘ Range(«E2»).Select ActiveCell.FormulaR1C1 = «Точность» Range(«E3»).Select ActiveCell.FormulaR1C1 = «=1-RC[-2]/RC[-1]» Range(«E3»).Select Selection.AutoFill Destination:=Range(«E3:E9») Range(«E3:E9»).Select End Sub
[свернуть]
[вложение удалено администратором]
Администратор
Administrator
Сообщения: 2,252
Записан
Макрос
Sub Макрос()
Dim lr As Long
‘ Поиск последней строки по столбцу A. ‘ End не ищет в скрытых строках. ‘ Это действие аналогично тому, как вы переходите в самый низ листа (т.е. на строку 1 млн), ‘ а затем нажимаете сочетание клавиш ‘Ctrl + стрелка вверх’. lr = Cells(Rows.Count, «A»).End(xlUp).Row
Создала макрос через «Запись макроса» Мне нужно протянуть формулу по столбцу до последней строки с данными. Макрос записал протягивание только до конкретной ячейки. Как это исправить?
Записываемый макрос не может делать многих вещей, например содержать циклы, проверки условий и т. п. Но самое ценное — он содержит примеры команд с их параметрами, которые нельзя зачастую найти в справочнике. Беря эти команды и параметры мы можем заглянуть в справочник и пополнить себя кое-какими знаниями о команде, Можем использовать команду в тестовом макросе, поиграть её параметрами изучить её поглубже.
Свои функции-макросы мы создаём для многократного употребления, либо для однократного употребления — но в больших массивах. В больших массивах мы можем для обработки выбрать обычно выбрать только одну ячейку или один диапазон в виде строки или столбца. В крайнем случае это диапазон математической матрицы. Записать массивом мы можем только копию массива. Записать вычисленный результат мы можем только в одну ячейку, Поэтому запрограммированный макрос обработки, как правило работает с ячейкой, способен определить её адрес, перейти в какую-то соседнюю ячейку, как требуется по алгоритму. Всякие ручные действия вроде протяжки курсором тоже можно запрограммировать, в виде расширения выборки, если знать специальные команды, или применяя цикл. Но в конечном итоге макрос должен или просто знать куда дотянуть курсор, или уметь автоматически вычислить это место.
Мне не видно с какой целью и конкретно куда вы делаете протяжку. Если вы это знаете, то подмените в вашем макросе номер строки, только и всего. Но посмотреть этот номер надо до запуска и корректировки макроса. Макрос мог бы и сам автоматически определить номер строки, если это граница области, заполненной данными, или в данных присутствует какое-то условие. Некоторые вещи вы делаете на глаз, и поэтому записать в виде алгоритма не можете. поэтому старайтесь придумывать всякие проверки условий, какие-то приемы, которые вы могли бы заложить в правильно действующий алгоритм.
Для обработки массивов определённой или неопределенной формы очень полезен цикл типа FOR EACH NEXT Изучите его, он может пригодиться.
Еще раз подчеркну, что ручной макрос всегда требует корректировки. Во-первых, он должен быть вами откомментирован, чтобы вы сами понимали в каких условиях он может работать, с какой ячейки должен стартовать, какие габариты таблиц обрабатывать и прочее. Если он не будет стартовать с правильной ячейки, данные будут наверняка испорчены.
Если вы в таблицу вставите какую-то строку-заголовок или описательны текст, данные поползут и макрос станет непригоден.
Вы должны понимать что такое относительная адресация, в которой обычно Excel работает, позволяя копировать формулы, добавлять строки данных без особых хлопот, и что такое абсолютная адресация в которой хлопоты создаются. Макрос и данные являются сильно связанными, и макрос может стать непригодным при каких-то изменениях Листа
Спасибо! Поставил ваш код в строке: Selection.AutoFill Destination:=ActiveCell.Range(«a») выдает ошибку
Мне надо что бы формулы рассчитывались по всему списку, не зависимо от того сколько строк в С1 (так как таблицы каждый раз разные может быть 2 строки а может за пару сотен)
Спасибо! Поставил ваш код в строке: Selection.AutoFill Destination:=ActiveCell.Range(«a») выдает ошибку
Мне надо что бы формулы рассчитывались по всему списку, не зависимо от того сколько строк в С1 (так как таблицы каждый раз разные может быть 2 строки а может за пару сотен) farafonov_sv
Сообщение Спасибо! Поставил ваш код в строке: Selection.AutoFill Destination:=ActiveCell.Range(«a») выдает ошибку
Мне надо что бы формулы рассчитывались по всему списку, не зависимо от того сколько строк в С1 (так как таблицы каждый раз разные может быть 2 строки а может за пару сотен) Автор — farafonov_sv Дата добавления — 25.11.2011 в 12:15
Jhonson
Дата: Пятница, 25.11.2011, 12:22 | Сообщение № 4
«Ничто не приносит людям столько неприятностей, как разум.»
Ответить
_Boroda_
Дата: Пятница, 25.11.2011, 12:24 | Сообщение № 5
Ответить
farafonov_sv
Дата: Пятница, 25.11.2011, 12:42 | Сообщение № 6
farafonov_sv
Дата: Понедельник, 28.11.2011, 12:20 | Сообщение № 7
Подскажите пож. что означает: Метод Select из класса Range завершен не верно. Добавил в ваш код эту строку:
Сообщение Подскажите пож. что означает: Метод Select из класса Range завершен не верно. Добавил в ваш код эту строку:
Sheets(«Стоимости»).Select Range(«E13»).Select Selection.FormulaR1C1 = «=SUM(Расчеты!C[1])» Автор — farafonov_sv Дата добавления — 28.11.2011 в 12:20
farafonov_sv
Дата: Понедельник, 28.11.2011, 14:12 | Сообщение № 8
farafonov_sv
Дата: Понедельник, 28.11.2011, 15:41 | Сообщение № 9
_Boroda_
Дата: Понедельник, 28.11.2011, 18:06 | Сообщение № 10
Не совсем понял, но, может, так?
Для нового файла кнопку нужно скопировать из этого и вставить в новый. Или создать свою новую и назвать ее CommandButton1. Или назвать новую как захочется, но в макросе написать Private Sub CommandButton1 _Click() вместо синего свое название
Перед макросами, на самом верху, есть строка Option Explicit — убейте ее или второй строкой макроса допишите Dim r_ Private Sub CommandButton1_Click() Dim r_ With Лист1
I. r_ = .Range(«c» & Rows.Count).End(xlUp).Row 1) Rows.Count — кол-во строк на листе (различно для 2003 и 2007/2010) 2) Range(«c» & Rows.Count) — виртуально «встаем» в ячейку C1048576 3) Range(«c» & Rows.Count).End(xlUp) — якобы жмем Ctrl+стрелка вверх 4) r_ = .Range(«c» & Rows.Count).End(xlUp).Row — присваеваем переменной r_ номер строки, в которой выделена ячейка 3).
II. Лист3.Range(«e» & r_ + 1 & «:G» & r_ + 1).FormulaR1C1 = «=SUM(R[-» & r_ — 1 & «]C:R[-1]C)» — в столбцы E-G строку r_ (см. п. I.) пишем формулу =СУММ(то, что выше)
Не совсем понял, но, может, так?
Для нового файла кнопку нужно скопировать из этого и вставить в новый. Или создать свою новую и назвать ее CommandButton1. Или назвать новую как захочется, но в макросе написать Private Sub CommandButton1 _Click() вместо синего свое название
Перед макросами, на самом верху, есть строка Option Explicit — убейте ее или второй строкой макроса допишите Dim r_ Private Sub CommandButton1_Click() Dim r_ With Лист1
I. r_ = .Range(«c» & Rows.Count).End(xlUp).Row 1) Rows.Count — кол-во строк на листе (различно для 2003 и 2007/2010) 2) Range(«c» & Rows.Count) — виртуально «встаем» в ячейку C1048576 3) Range(«c» & Rows.Count).End(xlUp) — якобы жмем Ctrl+стрелка вверх 4) r_ = .Range(«c» & Rows.Count).End(xlUp).Row — присваеваем переменной r_ номер строки, в которой выделена ячейка 3).
II. Лист3.Range(«e» & r_ + 1 & «:G» & r_ + 1).FormulaR1C1 = «=SUM(R[-» & r_ — 1 & «]C:R[-1]C)» — в столбцы E-G строку r_ (см. п. I.) пишем формулу =СУММ(то, что выше) _Boroda_
Для нового файла кнопку нужно скопировать из этого и вставить в новый. Или создать свою новую и назвать ее CommandButton1. Или назвать новую как захочется, но в макросе написать Private Sub CommandButton1 _Click() вместо синего свое название
Перед макросами, на самом верху, есть строка Option Explicit — убейте ее или второй строкой макроса допишите Dim r_ Private Sub CommandButton1_Click() Dim r_ With Лист1
I. r_ = .Range(«c» & Rows.Count).End(xlUp).Row 1) Rows.Count — кол-во строк на листе (различно для 2003 и 2007/2010) 2) Range(«c» & Rows.Count) — виртуально «встаем» в ячейку C1048576 3) Range(«c» & Rows.Count).End(xlUp) — якобы жмем Ctrl+стрелка вверх 4) r_ = .Range(«c» & Rows.Count).End(xlUp).Row — присваеваем переменной r_ номер строки, в которой выделена ячейка 3).
II. Лист3.Range(«e» & r_ + 1 & «:G» & r_ + 1).FormulaR1C1 = «=SUM(R[-» & r_ — 1 & «]C:R[-1]C)» — в столбцы E-G строку r_ (см. п. I.) пишем формулу =СУММ(то, что выше) Автор — _Boroda_ Дата добавления — 28.11.2011 в 18:06
farafonov_sv
Дата: Вторник, 29.11.2011, 13:52 | Сообщение № 11
Да то что надо. Спасибо Вам огромное! Подскажите пож. а в приложении №1 как то можно что бы он в конце каждого столбца ставил Итого?
подскажите пож. как этот код перенести в другую таблицу? Сделал все зеркально в чистой книге, пишет ошибку
Пишет: Compile error: Variable not defined
Private Sub CommandButton3_Click() выделяет желтым r_ = — выделяет синим
Да то что надо. Спасибо Вам огромное! Подскажите пож. а в приложении №1 как то можно что бы он в конце каждого столбца ставил Итого?
подскажите пож. как этот код перенести в другую таблицу? Сделал все зеркально в чистой книге, пишет ошибку
всем доброго времени суток
Уважаемые профи,подскажите,пожалуйста, такой вопрос: в ячейке С1 имеется формула =ТЕКСТ($D1;»ДД.ММ.ГГГГ ч:мм:сс»)
надо протянуть ее до последней заполненной ячейки по столбцу D . Соответственно в ячейке С2 будет формула =ТЕКСТ($D2;»ДД.ММ.ГГГГ ч:мм:сс») и тд
подскажите как это реализовать в vba(тк буду добавлять в макрос)
Спасибо большое
Код к задаче: «Vba протянуть формулу по столбцу С до последней ячейки по столбцу D»
textual
Sub val11()
lLastRowD = Cells(Rows.Count, "D").End(xlUp).Row
If lLastRowD > 1 Then Range("C1:C1").AutoFill Destination:=Range("C1:C" & lLastRowD), Type:=xlFillDefault
End Sub