Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Автоматическое протягивание формул на новую строку - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Автоматическое протягивание формул на новую строку (Формулы/Formulas)
Автоматическое протягивание формул на новую строку
ЮрийБ Дата: Вторник, 28.02.2017, 14:37 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Привет, народ.
Была "умная таблица", где при создании новой строки формулы прекрасно переносились на новую строчку. Стал необходим общий доступ к документу, умные таблицы использовать нельзя. А формулы руками каждый раз протягивать неудобно. В прищепке вырезанный кусок, добавляю данные в 15 строку, а то что там протянуто, хотелось бы чтобы протягивалось автоматом только на новые строки.
Поиск по форуму не дал результата. Сможет кто помочь?
К сообщению приложен файл: 8903471.xlsx (15.0 Kb)
 
Ответить
СообщениеПривет, народ.
Была "умная таблица", где при создании новой строки формулы прекрасно переносились на новую строчку. Стал необходим общий доступ к документу, умные таблицы использовать нельзя. А формулы руками каждый раз протягивать неудобно. В прищепке вырезанный кусок, добавляю данные в 15 строку, а то что там протянуто, хотелось бы чтобы протягивалось автоматом только на новые строки.
Поиск по форуму не дал результата. Сможет кто помочь?

Автор - ЮрийБ
Дата добавления - 28.02.2017 в 14:37
sboy Дата: Вторник, 28.02.2017, 15:15 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Как вариант использовать проверку на пусто в ячейке, куда вносите данные и протянуть ячеек на 1000 сразу
Код
=ЕСЛИ(ЕПУСТО(ячейка с данными);"";формула)

для примера сделал в столбце F
К сообщению приложен файл: 1256181.xlsx (16.8 Kb)


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
Как вариант использовать проверку на пусто в ячейке, куда вносите данные и протянуть ячеек на 1000 сразу
Код
=ЕСЛИ(ЕПУСТО(ячейка с данными);"";формула)

для примера сделал в столбце F

Автор - sboy
Дата добавления - 28.02.2017 в 15:15
ЮрийБ Дата: Вторник, 28.02.2017, 15:31 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
sboy, такой вариант я знаю, к сожалению, он не избавляет от протягивания как такового, лишь визуально скрывает лишние строки. В любом случае спасибо за ответ. Интересен именно вариант с автоматическим копированием с предыдущей строки.
 
Ответить
Сообщениеsboy, такой вариант я знаю, к сожалению, он не избавляет от протягивания как такового, лишь визуально скрывает лишние строки. В любом случае спасибо за ответ. Интересен именно вариант с автоматическим копированием с предыдущей строки.

Автор - ЮрийБ
Дата добавления - 28.02.2017 в 15:31
ЮрийБ Дата: Среда, 01.03.2017, 08:12 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Никто не предложит возможного решения проблемы с протягиванием?
 
Ответить
СообщениеНикто не предложит возможного решения проблемы с протягиванием?

Автор - ЮрийБ
Дата добавления - 01.03.2017 в 08:12
китин Дата: Среда, 01.03.2017, 08:43 | Сообщение № 5
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Поменяйте дату в первой пустой ячейке столбца G
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim dat_&
   dat_ = Cells(Rows.Count, 7).End(xlUp).Row + 1
   
   If Target.Cells.Count > 1 Then Exit Sub
   Application.EnableEvents = False
   If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
     Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Select
     Selection.Copy
     Range(Cells(dat_ - 1, 1), Cells(dat_ - 1, 6)).Select
     ActiveSheet.Paste
     Range("Y" & dat_ - 2).Select
     Selection.Copy
     Range("Y" & dat_ - 1).Select
     ActiveSheet.Paste
   Application.EnableEvents = True
End Sub
[/vba]
[p.s.] критика от знатоков приветствуется yes yes yes
К сообщению приложен файл: jgsn.xlsm (20.1 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852


Сообщение отредактировал китин - Среда, 01.03.2017, 09:20
 
Ответить
СообщениеПоменяйте дату в первой пустой ячейке столбца G
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim dat_&
   dat_ = Cells(Rows.Count, 7).End(xlUp).Row + 1
   
   If Target.Cells.Count > 1 Then Exit Sub
   Application.EnableEvents = False
   If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
     Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Select
     Selection.Copy
     Range(Cells(dat_ - 1, 1), Cells(dat_ - 1, 6)).Select
     ActiveSheet.Paste
     Range("Y" & dat_ - 2).Select
     Selection.Copy
     Range("Y" & dat_ - 1).Select
     ActiveSheet.Paste
   Application.EnableEvents = True
End Sub
[/vba]
[p.s.] критика от знатоков приветствуется yes yes yes

Автор - китин
Дата добавления - 01.03.2017 в 08:43
_Boroda_ Дата: Среда, 01.03.2017, 10:21 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
критика ... приветствуется

Ну, не критика, ты ж молодец, почти правильно работающий код написал, а так, комментарии

1. Это обычно первое, что нужно делать после рекодера. Берешь кусок[vba]
Код
    Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Select
    Selection.Copy
[/vba], встаешь мышой после точки в первой строке и, держа мышу нажатой, тянешь на другую строку до послеточки. Вот так
Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Select
Selection.
Copy
И жмешь на делит. Получается вот так[vba]
Код
    Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Copy
[/vba]

2. Конструкцию
[vba]
Код
Что.Copy
Куда.Paste
[/vba] можно писать просто вот так[vba]
Код
Что.Copy Куда
[/vba]
В итоге вместо[vba]
Код
    Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Select
    Selection.Copy
    Range(Cells(dat_ - 1, 1), Cells(dat_ - 1, 6)).Select
    ActiveSheet.Paste
[/vba]получаем[vba]
Код
    Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Copy Range(Cells(dat_ - 1, 1), Cells(dat_ - 1, 6))
[/vba]

3. Конструкцию[vba]
Код
Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6))
[/vba] можно переписать просто вот так[vba]
Код
Cells(dat_ - 2, 1).Resize(1, 6)
[/vba]
в итоге получаем[vba]
Код
   Cells(dat_ - 2, 1).Resize(1, 6).Copy Cells(dat_ - 1, 1).Resize(1, 6)
[/vba] Более того, второй .Resize(1, 6) не обязателен. В итоге получаем[vba]
Код
   Cells(dat_ - 2, 1).Resize(1, 6).Copy Cells(dat_ - 1, 1)
[/vba]

4. Ты сначала пишешь[vba]
Код
Application.EnableEvents = False
[/vba], а потом делаешь проверку с выходом из макроса[vba]
Код
If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
[/vba]. Если проверку не прошли, то кто будет включать EnableEvents обратно? Как раз вот здесь в коде ошибка. Остальное так, не критично

5. Когда определяешь dat_, то ты прибавляешь единицу[vba]
Код
dat_ = Cells(Rows.Count, 7).End(xlUp).Row + 1
[/vba], а ниже везде в коде у тебя dat_ - 2 и dat_ - 1
Если единицу не прибавлять, то dat_ - 2 станет dat_ - 1, а dat_ - 1 станет dat_. Более того, копировать формулы можно не из строки выше, а из второй строки, тогда dat_ - 2 (которая стала dat_ - 1) вообще не нужна

6. Проверку на то, что изменяемая ячейка одна, можно не делать (а можно и сделать). А вот проверку на то, что изменяемая ячейка не пустая, можно. Кстати, заодно можно и проверку на дату сделать. Можно написать очень похожий код, но для множественного ввода в столбец G, но это уже в другой раз

В итоге получаем что-то типа
К сообщению приложен файл: jgsn_1.xlsm (20.1 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
критика ... приветствуется

Ну, не критика, ты ж молодец, почти правильно работающий код написал, а так, комментарии

1. Это обычно первое, что нужно делать после рекодера. Берешь кусок[vba]
Код
    Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Select
    Selection.Copy
[/vba], встаешь мышой после точки в первой строке и, держа мышу нажатой, тянешь на другую строку до послеточки. Вот так
Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Select
Selection.
Copy
И жмешь на делит. Получается вот так[vba]
Код
    Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Copy
[/vba]

2. Конструкцию
[vba]
Код
Что.Copy
Куда.Paste
[/vba] можно писать просто вот так[vba]
Код
Что.Copy Куда
[/vba]
В итоге вместо[vba]
Код
    Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Select
    Selection.Copy
    Range(Cells(dat_ - 1, 1), Cells(dat_ - 1, 6)).Select
    ActiveSheet.Paste
[/vba]получаем[vba]
Код
    Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Copy Range(Cells(dat_ - 1, 1), Cells(dat_ - 1, 6))
[/vba]

3. Конструкцию[vba]
Код
Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6))
[/vba] можно переписать просто вот так[vba]
Код
Cells(dat_ - 2, 1).Resize(1, 6)
[/vba]
в итоге получаем[vba]
Код
   Cells(dat_ - 2, 1).Resize(1, 6).Copy Cells(dat_ - 1, 1).Resize(1, 6)
[/vba] Более того, второй .Resize(1, 6) не обязателен. В итоге получаем[vba]
Код
   Cells(dat_ - 2, 1).Resize(1, 6).Copy Cells(dat_ - 1, 1)
[/vba]

4. Ты сначала пишешь[vba]
Код
Application.EnableEvents = False
[/vba], а потом делаешь проверку с выходом из макроса[vba]
Код
If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
[/vba]. Если проверку не прошли, то кто будет включать EnableEvents обратно? Как раз вот здесь в коде ошибка. Остальное так, не критично

5. Когда определяешь dat_, то ты прибавляешь единицу[vba]
Код
dat_ = Cells(Rows.Count, 7).End(xlUp).Row + 1
[/vba], а ниже везде в коде у тебя dat_ - 2 и dat_ - 1
Если единицу не прибавлять, то dat_ - 2 станет dat_ - 1, а dat_ - 1 станет dat_. Более того, копировать формулы можно не из строки выше, а из второй строки, тогда dat_ - 2 (которая стала dat_ - 1) вообще не нужна

6. Проверку на то, что изменяемая ячейка одна, можно не делать (а можно и сделать). А вот проверку на то, что изменяемая ячейка не пустая, можно. Кстати, заодно можно и проверку на дату сделать. Можно написать очень похожий код, но для множественного ввода в столбец G, но это уже в другой раз

В итоге получаем что-то типа

Автор - _Boroda_
Дата добавления - 01.03.2017 в 10:21
китин Дата: Среда, 01.03.2017, 11:10 | Сообщение № 7
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
после проработки комментариев _Boroda_, за что ему отдельное огромное спасибо получилось вот что
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim dat_&
   dat_ = Cells(Rows.Count, 7).End(xlUp).Row + 1
   Application.EnableEvents = False
   If Target.Cells.Count > 1 Then Exit Sub
   
   If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
     Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Copy Range(Cells(dat_ - 1, 1), Cells(dat_ - 1, 6))
     
     Range("Y" & dat_ - 2).Copy Range("Y" & dat_ - 1)
     
   Application.EnableEvents = True
End Sub
[/vba]
[offtop]и ведь, что удивительно, РАБОТАЕТ!!!!!!!!


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852


Сообщение отредактировал китин - Среда, 01.03.2017, 11:11
 
Ответить
Сообщениепосле проработки комментариев _Boroda_, за что ему отдельное огромное спасибо получилось вот что
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim dat_&
   dat_ = Cells(Rows.Count, 7).End(xlUp).Row + 1
   Application.EnableEvents = False
   If Target.Cells.Count > 1 Then Exit Sub
   
   If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
     Range(Cells(dat_ - 2, 1), Cells(dat_ - 2, 6)).Copy Range(Cells(dat_ - 1, 1), Cells(dat_ - 1, 6))
     
     Range("Y" & dat_ - 2).Copy Range("Y" & dat_ - 1)
     
   Application.EnableEvents = True
End Sub
[/vba]
[offtop]и ведь, что удивительно, РАБОТАЕТ!!!!!!!!

Автор - китин
Дата добавления - 01.03.2017 в 11:10
sboy Дата: Среда, 01.03.2017, 11:17 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
китин,
Если проверку не прошли, то кто будет включать EnableEvents обратно? Как раз вот здесь в коде ошибка. Остальное так, не критично

Вот это не учли (а это важно) :)


Яндекс: 410016850021169
 
Ответить
Сообщениекитин,
Если проверку не прошли, то кто будет включать EnableEvents обратно? Как раз вот здесь в коде ошибка. Остальное так, не критично

Вот это не учли (а это важно) :)

Автор - sboy
Дата добавления - 01.03.2017 в 11:17
_Boroda_ Дата: Среда, 01.03.2017, 11:20 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Игорь, еще раз внимательно перечитай п.4 - это важно
и п.5 - это не очень важно, но зачем делать лишние вычисления в коде? Конкретно здесь это почти никакой разницы не даст, а если все это в огромном цикле будет?
п.3 - кому как нравится, но с Ресайзом феншуйнее, да и обращений к листу меньше, что тоже на времени выполнения в больших циклах может сказаться


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеИгорь, еще раз внимательно перечитай п.4 - это важно
и п.5 - это не очень важно, но зачем делать лишние вычисления в коде? Конкретно здесь это почти никакой разницы не даст, а если все это в огромном цикле будет?
п.3 - кому как нравится, но с Ресайзом феншуйнее, да и обращений к листу меньше, что тоже на времени выполнения в больших циклах может сказаться

Автор - _Boroda_
Дата добавления - 01.03.2017 в 11:20
китин Дата: Среда, 01.03.2017, 11:36 | Сообщение № 10
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
то есть получается, что
Код
Application.EnableEvents = False
, что бы работало надо ставить ПОСЛЕ второго If ?Вот так ?
[vba]
Код
If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
Application.EnableEvents = False
[/vba]
или вообще не ставить :D
Когда определяешь dat_, то ты прибавляешь единицу

ну да. мне же надо отследить изменения в первой незаполненной ячейке. а
Код
dat_ = Cells(Rows.Count, 7).End(xlUp).Row
покажет нам последнюю заполненную.
с Ресайзом феншуйнее

всякому овосчу свое время. дойдет очередь и до [vba]
Код
Resize
[/vba]
мне бы сейчас с [vba]
Код
Worksheet_Change(ByVal Target As Range)
[/vba]разобраться


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщението есть получается, что
Код
Application.EnableEvents = False
, что бы работало надо ставить ПОСЛЕ второго If ?Вот так ?
[vba]
Код
If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
Application.EnableEvents = False
[/vba]
или вообще не ставить :D
Когда определяешь dat_, то ты прибавляешь единицу

ну да. мне же надо отследить изменения в первой незаполненной ячейке. а
Код
dat_ = Cells(Rows.Count, 7).End(xlUp).Row
покажет нам последнюю заполненную.
с Ресайзом феншуйнее

всякому овосчу свое время. дойдет очередь и до [vba]
Код
Resize
[/vba]
мне бы сейчас с [vba]
Код
Worksheet_Change(ByVal Target As Range)
[/vba]разобраться

Автор - китин
Дата добавления - 01.03.2017 в 11:36
_Boroda_ Дата: Среда, 01.03.2017, 11:47 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
мне же надо отследить изменения в первой незаполненной ячейке

Чей-то вдруг? Ты ж ее только что заполнил датой. Тебе нужна последняя заполненная строка

[vba]
Код
Application.EnableEvents = False
[/vba]нужно ставить так, чтобы между ним и [vba]
Код
Application.EnableEvents = False
[/vba]были только те строки, где при изменении в коде макрос лишний раз пытается вывалиться в обработчик событий. Иногда этим пренебрегают (типа, у нас будет два лишних перепрыгивания в обработчик, ну и хрен с ними) , но лучше так не делать.
И уж точно ставим после последнего принудительного выхода из макроса. Или делаем обработчик такого выхода с включением EnableEvents


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
мне же надо отследить изменения в первой незаполненной ячейке

Чей-то вдруг? Ты ж ее только что заполнил датой. Тебе нужна последняя заполненная строка

[vba]
Код
Application.EnableEvents = False
[/vba]нужно ставить так, чтобы между ним и [vba]
Код
Application.EnableEvents = False
[/vba]были только те строки, где при изменении в коде макрос лишний раз пытается вывалиться в обработчик событий. Иногда этим пренебрегают (типа, у нас будет два лишних перепрыгивания в обработчик, ну и хрен с ними) , но лучше так не делать.
И уж точно ставим после последнего принудительного выхода из макроса. Или делаем обработчик такого выхода с включением EnableEvents

Автор - _Boroda_
Дата добавления - 01.03.2017 в 11:47
китин Дата: Среда, 01.03.2017, 11:48 | Сообщение № 12
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
интересно а почему [vba]
Код
Range("A" & dat_ & ":" & "E" & dat_)
[/vba]прокатывает, а [vba]
Код
Range("A" & dat_-2 & ":" & "E" & dat_-2)
[/vba] не хочет

и высвечивает : синеньким?
К сообщению приложен файл: 6650245.jpg (23.7 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщениеинтересно а почему [vba]
Код
Range("A" & dat_ & ":" & "E" & dat_)
[/vba]прокатывает, а [vba]
Код
Range("A" & dat_-2 & ":" & "E" & dat_-2)
[/vba] не хочет

и высвечивает : синеньким?

Автор - китин
Дата добавления - 01.03.2017 в 11:48
_Boroda_ Дата: Среда, 01.03.2017, 11:50 | Сообщение № 13
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
где пробел после двойки?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщениегде пробел после двойки?

Автор - _Boroda_
Дата добавления - 01.03.2017 в 11:50
китин Дата: Среда, 01.03.2017, 11:52 | Сообщение № 14
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Тебе нужна последняя заполненная строка
если убрать +1 работать не хочет.
я не настаиваю, но [vba]
Код
If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
[/vba] ведь отслеживать изменения именно в первой пустой ячейке %)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщение
Тебе нужна последняя заполненная строка
если убрать +1 работать не хочет.
я не настаиваю, но [vba]
Код
If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
[/vba] ведь отслеживать изменения именно в первой пустой ячейке %)

Автор - китин
Дата добавления - 01.03.2017 в 11:52
китин Дата: Среда, 01.03.2017, 11:56 | Сообщение № 15
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
где пробел

упс....


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщение
где пробел

упс....

Автор - китин
Дата добавления - 01.03.2017 в 11:56
_Boroda_ Дата: Среда, 01.03.2017, 12:01 | Сообщение № 16
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
ведь отслеживать изменения именно в первой пустой ячейке

Нет. Target - это тот диапазон, в котором ты УЖЕ что-то сделал (в нашем случае вставил дату). Он не пустой, там уже дата, которую ты только что ввел.

А то, что "работать не хочет" - предположу, что ты внизу в коде так и оставил -2 и -1. А я про что писал? Что -2 становится -1, а -1 становится нулем
Вот это
[vba]
Код
Range("Y" & dat_ - 2).Copy Range("Y" & dat_ - 1)
[/vba] станет вот этим
[vba]
Код
Range("Y" & dat_ - 1).Copy Range("Y" & dat_)
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
ведь отслеживать изменения именно в первой пустой ячейке

Нет. Target - это тот диапазон, в котором ты УЖЕ что-то сделал (в нашем случае вставил дату). Он не пустой, там уже дата, которую ты только что ввел.

А то, что "работать не хочет" - предположу, что ты внизу в коде так и оставил -2 и -1. А я про что писал? Что -2 становится -1, а -1 становится нулем
Вот это
[vba]
Код
Range("Y" & dat_ - 2).Copy Range("Y" & dat_ - 1)
[/vba] станет вот этим
[vba]
Код
Range("Y" & dat_ - 1).Copy Range("Y" & dat_)
[/vba]

Автор - _Boroda_
Дата добавления - 01.03.2017 в 12:01
китин Дата: Среда, 01.03.2017, 12:08 | Сообщение № 17
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
ты внизу в коде так и оставил -2 и -1

неправдочка ваша.
К сообщению приложен файл: 6051771.xlsm (20.4 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщение
ты внизу в коде так и оставил -2 и -1

неправдочка ваша.

Автор - китин
Дата добавления - 01.03.2017 в 12:08
_Boroda_ Дата: Среда, 01.03.2017, 12:14 | Сообщение № 18
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Вот это
[vba]
Код
If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
[/vba]
по-русски - если пересечение изменяемой ячейки и Range(...) НЕ ПУСТО, то выход из макроса

Сотри там Not


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВот это
[vba]
Код
If Not Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
[/vba]
по-русски - если пересечение изменяемой ячейки и Range(...) НЕ ПУСТО, то выход из макроса

Сотри там Not

Автор - _Boroda_
Дата добавления - 01.03.2017 в 12:14
китин Дата: Среда, 01.03.2017, 12:17 | Сообщение № 19
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Сотри там Not

ясно. заработало
вот
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim dat_&
   dat_ = Cells(Rows.Count, 7).End(xlUp).Row
   
   If Target.Cells.Count > 1 Then Exit Sub
    If Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
     Application.EnableEvents = False
       
       Range("A" & dat_ - 1 & ":" & "F" & dat_ - 1).Copy Range("A" & dat_ & ":" & "F" & dat_)
     
       Range("Y" & dat_ - 1).Copy Range("Y" & dat_)
     
     Application.EnableEvents = True
     
End Sub
[/vba]
К сообщению приложен файл: 3520937.xlsm (20.5 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852


Сообщение отредактировал китин - Среда, 01.03.2017, 12:17
 
Ответить
Сообщение
Сотри там Not

ясно. заработало
вот
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim dat_&
   dat_ = Cells(Rows.Count, 7).End(xlUp).Row
   
   If Target.Cells.Count > 1 Then Exit Sub
    If Intersect(Target, Range("G" & dat_)) Is Nothing Then Exit Sub
     Application.EnableEvents = False
       
       Range("A" & dat_ - 1 & ":" & "F" & dat_ - 1).Copy Range("A" & dat_ & ":" & "F" & dat_)
     
       Range("Y" & dat_ - 1).Copy Range("Y" & dat_)
     
     Application.EnableEvents = True
     
End Sub
[/vba]

Автор - китин
Дата добавления - 01.03.2017 в 12:17
_Boroda_ Дата: Среда, 01.03.2017, 12:28 | Сообщение № 20
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Поздравляю. Главное, что разобрались с EnableEvents и Select, остальное не так важно


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПоздравляю. Главное, что разобрались с EnableEvents и Select, остальное не так важно

Автор - _Boroda_
Дата добавления - 01.03.2017 в 12:28
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Автоматическое протягивание формул на новую строку (Формулы/Formulas)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!