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

Вход

Регистрация

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

 

= Мир MS Excel/Добавление нескольких строк в разных частях таблицы - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление нескольких строк в разных частях таблицы (Макросы/Sub)
Добавление нескольких строк в разных частях таблицы
yakovlevra Дата: Вторник, 21.10.2014, 13:38 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день.
К сожалению, не смог найти ответа на свой вопрос. Прошу, помогите.

Задача: суть приложенного файла - анкета на подготовку договора. Сотрудник продаж должен вписать необходимые значения и направить файл сотруднику поддержки. В анкете есть значения: DID (ячейка D18), Инстал и Абон за DID (ячейка F22, F23). Бывает ситуации, когда сотрудник может продать не один DID, а более, соответственно вариантов Инстал и Абон может быть несколько.
Как сделать так, чтобы при нажатии на кнопку "Добавить DID" под строками 18,22 и 23 добавлялись еще одни с тем же форматированием, а в соответствующих ячейках столбца С появлялись надписи "DID #2", "ИНСТАЛ: за DID 2 и "АБОН: за DID 2".

Буду признателен за любую подсказку.
К сообщению приложен файл: ____FIX__excelw.xltm (56.6 Kb)
 
Ответить
СообщениеДобрый день.
К сожалению, не смог найти ответа на свой вопрос. Прошу, помогите.

Задача: суть приложенного файла - анкета на подготовку договора. Сотрудник продаж должен вписать необходимые значения и направить файл сотруднику поддержки. В анкете есть значения: DID (ячейка D18), Инстал и Абон за DID (ячейка F22, F23). Бывает ситуации, когда сотрудник может продать не один DID, а более, соответственно вариантов Инстал и Абон может быть несколько.
Как сделать так, чтобы при нажатии на кнопку "Добавить DID" под строками 18,22 и 23 добавлялись еще одни с тем же форматированием, а в соответствующих ячейках столбца С появлялись надписи "DID #2", "ИНСТАЛ: за DID 2 и "АБОН: за DID 2".

Буду признателен за любую подсказку.

Автор - yakovlevra
Дата добавления - 21.10.2014 в 13:38
alex1248 Дата: Вторник, 21.10.2014, 19:38 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний: 0% ±

Excel 2007, 2010
Буду признателен за любую подсказку.

Ну если так.
Вообще говоря, при том, что есть какие-то настройки (кто-то ведь их делал), не совсем понятно, в чем сложность.
Находим строки и номер последнего DID, после найденных строк вставляем пустые строки, копируем в них предыдущие, заменяем номер DID на +1. Удаление аналогично.
Возможно, при вставке / удалении строк возникнут нюансы с кнопками и их придется переместить.


skype alex12481632
Qiwi +79276708519


Сообщение отредактировал alex1248 - Вторник, 21.10.2014, 19:39
 
Ответить
Сообщение
Буду признателен за любую подсказку.

Ну если так.
Вообще говоря, при том, что есть какие-то настройки (кто-то ведь их делал), не совсем понятно, в чем сложность.
Находим строки и номер последнего DID, после найденных строк вставляем пустые строки, копируем в них предыдущие, заменяем номер DID на +1. Удаление аналогично.
Возможно, при вставке / удалении строк возникнут нюансы с кнопками и их придется переместить.

Автор - alex1248
Дата добавления - 21.10.2014 в 19:38
yakovlevra Дата: Вторник, 21.10.2014, 20:09 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
alex1248, спасибо, логика сценария понятна.

[vba]
Код
Rows("19:19").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("C18:J18").Select
Selection.AutoFill Destination:=Range("C18:J19"), Type:=xlFillDefault
[/vba]

В моем примере я вставляю под строкой DID новую заполняю строку 19 значениями из 18. Т.е. не лучшее решение - новые строки должны идти последовательно друг под другом.

Необходимо не просто продублировать первую строку - в дипозоне нужно найти последнюю строку, вставить под ней новую и заполнить значениями из строки сверху.
Сложности у меня возникают с поиском последней строки.


Сообщение отредактировал yakovlevra - Вторник, 21.10.2014, 20:22
 
Ответить
Сообщениеalex1248, спасибо, логика сценария понятна.

[vba]
Код
Rows("19:19").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("C18:J18").Select
Selection.AutoFill Destination:=Range("C18:J19"), Type:=xlFillDefault
[/vba]

В моем примере я вставляю под строкой DID новую заполняю строку 19 значениями из 18. Т.е. не лучшее решение - новые строки должны идти последовательно друг под другом.

Необходимо не просто продублировать первую строку - в дипозоне нужно найти последнюю строку, вставить под ней новую и заполнить значениями из строки сверху.
Сложности у меня возникают с поиском последней строки.

Автор - yakovlevra
Дата добавления - 21.10.2014 в 20:09
alex1248 Дата: Вторник, 21.10.2014, 20:17 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний: 0% ±

Excel 2007, 2010
Необходимо не просто продублировать первую строку - в дипозоне нужно найти последнюю строку, вставить под ней новую и заполнить значениями из строки сверху.
Сложности у меня возникают с поиском последней строки.

Например, сначала определяем номер последней заполненной строки в нужном столбце, можно так (для столбца С)
[vba]
Код
        lLastRow = Cells(Rows.Count, "C").End(xlUp).Row
[/vba]
От нее циклом вверх по столбцу С ищем ячейку, содержащую, например, "Тип линий". На 2 строки выше должна быть последняя "DID № <>", там же и номер последнего DID.


skype alex12481632
Qiwi +79276708519


Сообщение отредактировал alex1248 - Вторник, 21.10.2014, 20:19
 
Ответить
Сообщение
Необходимо не просто продублировать первую строку - в дипозоне нужно найти последнюю строку, вставить под ней новую и заполнить значениями из строки сверху.
Сложности у меня возникают с поиском последней строки.

Например, сначала определяем номер последней заполненной строки в нужном столбце, можно так (для столбца С)
[vba]
Код
        lLastRow = Cells(Rows.Count, "C").End(xlUp).Row
[/vba]
От нее циклом вверх по столбцу С ищем ячейку, содержащую, например, "Тип линий". На 2 строки выше должна быть последняя "DID № <>", там же и номер последнего DID.

Автор - alex1248
Дата добавления - 21.10.2014 в 20:17
yakovlevra Дата: Вторник, 21.10.2014, 20:33 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
alex1248, спасибо. Думал об этом. Однако, при использовании такого решения (поиск по столбцу и на 2 строки выше) возникают сложности с работой со строками 22 и 23 (ИНСТАЛ, АБОН) - так как они тоже будут копироваться.

Пришла мысль, что мою задачу помогут решить именованные диапазоны. Есть ли способ искать последнюю строку в именованном диапазоне?

Обновил файл-пример. Строку 18 сделал именованным диапазоном "VOICE_900_001_DID", строки 22 и 23 "VOICE_900_001_INST" и "VOICE_900_001_ABON" соответственно.
К сообщению приложен файл: 4688017.xltm (56.7 Kb)
 
Ответить
Сообщениеalex1248, спасибо. Думал об этом. Однако, при использовании такого решения (поиск по столбцу и на 2 строки выше) возникают сложности с работой со строками 22 и 23 (ИНСТАЛ, АБОН) - так как они тоже будут копироваться.

Пришла мысль, что мою задачу помогут решить именованные диапазоны. Есть ли способ искать последнюю строку в именованном диапазоне?

Обновил файл-пример. Строку 18 сделал именованным диапазоном "VOICE_900_001_DID", строки 22 и 23 "VOICE_900_001_INST" и "VOICE_900_001_ABON" соответственно.

Автор - yakovlevra
Дата добавления - 21.10.2014 в 20:33
alex1248 Дата: Вторник, 21.10.2014, 20:43 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний: 0% ±

Excel 2007, 2010
возникают сложности с работой со строками 22 и 23 (ИНСТАЛ, АБОН) - так как они тоже будут копироваться.

В чем сложность? Если сами слова ИНСТАЛ и АБОН будут копировать вместе со строками, находите их аналогично, либо расчетом. Если они копироваться не будут, то последний АБОН на 2 строки выше "Минимальный счет", а последний ИНСТАЛ на 1 строку выше ячейки, содержащей "АБОН".


skype alex12481632
Qiwi +79276708519
 
Ответить
Сообщение
возникают сложности с работой со строками 22 и 23 (ИНСТАЛ, АБОН) - так как они тоже будут копироваться.

В чем сложность? Если сами слова ИНСТАЛ и АБОН будут копировать вместе со строками, находите их аналогично, либо расчетом. Если они копироваться не будут, то последний АБОН на 2 строки выше "Минимальный счет", а последний ИНСТАЛ на 1 строку выше ячейки, содержащей "АБОН".

Автор - alex1248
Дата добавления - 21.10.2014 в 20:43
alex1248 Дата: Вторник, 21.10.2014, 20:44 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний: 0% ±

Excel 2007, 2010
Пришла мысль, что мою задачу помогут решить именованные диапазоны. Есть ли способ искать последнюю строку в именованном диапазоне?

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


skype alex12481632
Qiwi +79276708519
 
Ответить
Сообщение
Пришла мысль, что мою задачу помогут решить именованные диапазоны. Есть ли способ искать последнюю строку в именованном диапазоне?

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

Автор - alex1248
Дата добавления - 21.10.2014 в 20:44
yakovlevra Дата: Вторник, 21.10.2014, 20:56 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
alex1248, да, это так. Но у меня все равно нет идей, как искать проблемные строки 22 и 23...
 
Ответить
Сообщениеalex1248, да, это так. Но у меня все равно нет идей, как искать проблемные строки 22 и 23...

Автор - yakovlevra
Дата добавления - 21.10.2014 в 20:56
alex1248 Дата: Вторник, 21.10.2014, 21:01 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний: 0% ±

Excel 2007, 2010
Но у меня все равно нет идей, как искать проблемные строки 22 и 23...

А этот вариант чем не устраивает?
Если сами слова ИНСТАЛ и АБОН будут копировать вместе со строками, находите их аналогично, либо расчетом. Если они копироваться не будут, то последний АБОН на 2 строки выше "Минимальный счет", а последний ИНСТАЛ на 1 строку выше ячейки, содержащей "АБОН".

Вроде бы, то же самое, что и с "Тип линии". %)


skype alex12481632
Qiwi +79276708519
 
Ответить
Сообщение
Но у меня все равно нет идей, как искать проблемные строки 22 и 23...

А этот вариант чем не устраивает?
Если сами слова ИНСТАЛ и АБОН будут копировать вместе со строками, находите их аналогично, либо расчетом. Если они копироваться не будут, то последний АБОН на 2 строки выше "Минимальный счет", а последний ИНСТАЛ на 1 строку выше ячейки, содержащей "АБОН".

Вроде бы, то же самое, что и с "Тип линии". %)

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

2003; 2007; 2010; 2013 RUS
Примерно так можно для D18. Остальные аналогично
[vba]
Код
Sub tt()'Добавить
      r_ = 19
      Do While Range("C" & r_) <> ""
          r_ = r_ + 1
      Loop
      Range("C" & r_).EntireRow.Insert
      Range("C" & r_) = "DID №" & r_ - 17 & ":"
End Sub

Sub ttt()'Убрать
      r_ = 18
      Do While Range("C" & r_) <> ""
          r_ = r_ + 1
      Loop
      If r_ = 19 Then Exit Sub
      Range("C" & r_ - 1).EntireRow.Delete
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПримерно так можно для D18. Остальные аналогично
[vba]
Код
Sub tt()'Добавить
      r_ = 19
      Do While Range("C" & r_) <> ""
          r_ = r_ + 1
      Loop
      Range("C" & r_).EntireRow.Insert
      Range("C" & r_) = "DID №" & r_ - 17 & ":"
End Sub

Sub ttt()'Убрать
      r_ = 18
      Do While Range("C" & r_) <> ""
          r_ = r_ + 1
      Loop
      If r_ = 19 Then Exit Sub
      Range("C" & r_ - 1).EntireRow.Delete
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 21.10.2014 в 21:03
yakovlevra Дата: Вторник, 21.10.2014, 23:31 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, большое спасибо. Но немного не подходит под мою задачу - нельзя указывать точные значения номеров строк, так как они могут менятся. Так если добавить строку сверху строки DID - макрос ломается.


Сообщение отредактировал yakovlevra - Вторник, 21.10.2014, 23:42
 
Ответить
Сообщение_Boroda_, большое спасибо. Но немного не подходит под мою задачу - нельзя указывать точные значения номеров строк, так как они могут менятся. Так если добавить строку сверху строки DID - макрос ломается.

Автор - yakovlevra
Дата добавления - 21.10.2014 в 23:31
alex77755 Дата: Среда, 22.10.2014, 09:41 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Добавлять диды.
Немного доработать с форматированием.
По аналогии и остальные
[vba]
Код
Private Sub CommandButton1_Click()
Dim Rx As Range, RN As Range, F, R, N As Integer
F = "Тип линий"
Set RN = Columns(3): Set Rx = RN.Find(F): R = Rx.Row
     N = CInt(VBA.Replace(VBA.Replace(Cells(R - 2, 3), "DID №", ""), ":", ""))
     Rows(R - 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
     Cells(R - 1, 3) = "DID №" & N + 1 & ":"
End Sub
[/vba]


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеДобавлять диды.
Немного доработать с форматированием.
По аналогии и остальные
[vba]
Код
Private Sub CommandButton1_Click()
Dim Rx As Range, RN As Range, F, R, N As Integer
F = "Тип линий"
Set RN = Columns(3): Set Rx = RN.Find(F): R = Rx.Row
     N = CInt(VBA.Replace(VBA.Replace(Cells(R - 2, 3), "DID №", ""), ":", ""))
     Rows(R - 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
     Cells(R - 1, 3) = "DID №" & N + 1 & ":"
End Sub
[/vba]

Автор - alex77755
Дата добавления - 22.10.2014 в 09:41
alex77755 Дата: Среда, 22.10.2014, 10:39 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

всё:


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
Сообщениевсё:

Автор - alex77755
Дата добавления - 22.10.2014 в 10:39
yakovlevra Дата: Понедельник, 27.10.2014, 17:35 | Сообщение № 14
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Большое спасибо. Все получилось.
Не обошлось без моих любимых именованных диапазонов. Пример с решением во вложении.
К сообщению приложен файл: ____FIX__Excelw.rar (76.4 Kb)
 
Ответить
СообщениеБольшое спасибо. Все получилось.
Не обошлось без моих любимых именованных диапазонов. Пример с решением во вложении.

Автор - yakovlevra
Дата добавления - 27.10.2014 в 17:35
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление нескольких строк в разных частях таблицы (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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