VBA вставка N строк в зависимости от значения ячейки

Автор iron priest, 30.05.2012, 11:52

« назад - далее »

iron priest

Добрый день!
Возник вопрос, связанный с темой

задача следующего плана, нужно вставить некоторое кол-во строк в зависимости от значения в ячейках колонки А

например
1 - вставить ниже 1 строку
4 - вставить ниже к строки
0 - ничего не менять


спасибо


NooBasTiK

Вот как пример в ячейку I3 надо писать кол-во строк.

iron priest

ничего не понял из этого файла, нужно не из одной ячейки сделать вставку и перебрать диапазон

NooBasTiK

ну я и написал что вот как пример, а как сделать в VBA не знаю.

Шпец Докапыч

Цитата: iron priest от 30.05.2012, 11:52
задача следующего плана, нужно вставить некоторое кол-во строк в зависимости от значения в ячейках колонки А
Вот рецепт:
Sub SHD_AddRows()
  LR = Cells(Rows.Count, 1).End(xlUp).Row
  For i = LR To 1 Step -1
    If Val(Cells(i, 1)) > 0 Then
      Rows(i + 1 & ":" & i + Cells(i, 1)).Insert
    End If
  Next
End Sub
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

NooBasTiK

Цитата: Шпец Докапыч от 31.05.2012, 15:37
Цитата: iron priest от 30.05.2012, 11:52
задача следующего плана, нужно вставить некоторое кол-во строк в зависимости от значения в ячейках колонки А
Вот рецепт:
Sub SHD_AddRows()
  LR = Cells(Rows.Count, 1).End(xlUp).Row
  For i = LR To 1 Step -1
    If Val(Cells(i, 1)) > 0 Then
      Rows(i + 1 & ":" & i + Cells(i, 1)).Insert
    End If
  Next
End Sub

А как сделать что бы из другой колонки брал?

Poltava

#6
Может как то так
Option Explicit
Sub SHD_AddRows()
 Dim ColN As Integer, LR As Long, i As Long
 ColN = 3 'номер колонки для поиска количества строк
 LR = Cells(Rows.Count, ColN).End(xlUp).Row 'Определяем номер последней строки
 For i = LR To 1 Step -1 'Идем цыклом снизу вверх чтоб не вызвать зацыкливания
   If Val(Cells(i, ColN)) > 0 Then 'проверяем значение из ячейки на условие больше нуля
     Rows(i + 1 & ":" & i + Cells(i, ColN)).Insert 'вставляем строки
   End If
 Next
End Sub

Прошу прощения у Шпец Докапыч, а то влез тут со своими комментариями в его интеллектуальную собственность   ;)
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

NooBasTiK

Цитата: Poltava от 31.05.2012, 22:12
Может как то так
Option Explicit
Sub SHD_AddRows()
 Dim ColN As Integer, LR As Long, i As Long
 ColN = 3 'номер колонки для поиска количества строк
 LR = Cells(Rows.Count, ColN).End(xlUp).Row 'Определяем номер последней строки
 For i = LR To 1 Step -1 'Идем цыклом снизу вверх чтоб не вызвать зацыкливания
   If Val(Cells(i, ColN)) > 0 Then 'проверяем значение из ячейки на условие больше нуля
     Rows(i + 1 & ":" & i + Cells(i, ColN)).Insert 'вставляем строки
   End If
 Next
End Sub

Прошу прощения у Шпец Докапыч, а то влез тут со своими комментариями в его интеллектуальную собственность   ;)
Еще одна нескромная просьба, можно сделать так что бы он работал в двух режимах, удалял строки и добавлял строки согласно цифрам в столбце, то что делал целый день с помощью этого кода сделал за 40 минут :)

Poltava

А как это должно быть ??? макрос проверяет и если числа отрицательные удаляет, либо два разных макроса один удаляет другой добавляет и тут уже без отрицательных чисел можно. либо макрос будет вызываться из другой процедуры и при вызове в качестве параметра будет идти добавлять или удалять строки ??? Да и вообще удаление строк это более ответственный процесс! тут нужно понимать что делать если в удаляемой строке есть информация либо если удалить нужно строки которые дальше могли использоваться в общем тут больше проверок нужно о которых только вы знаете.
Ну а в общем случае попробуйте заменить .Insert на .Delete
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

NooBasTiK

#9
Цитата: Poltava от 01.06.2012, 11:17
А как это должно быть ??? макрос проверяет и если числа отрицательные удаляет, либо два разных макроса один удаляет другой добавляет и тут уже без отрицательных чисел можно. либо макрос будет вызываться из другой процедуры и при вызове в качестве параметра будет идти добавлять или удалять строки ??? Да и вообще удаление строк это более ответственный процесс! тут нужно понимать что делать если в удаляемой строке есть информация либо если удалить нужно строки которые дальше могли использоваться в общем тут больше проверок нужно о которых только вы знаете.
Ну а в общем случае попробуйте заменить .Insert на .Delete
Ну можно просто сделать два макроса один прибавляет другой удаляет, числа положительные.Нужно затем , что таблица сводная меняется постоянно и ,что бы не корячится с удалением и добавлением легче сделать через макрос. С .Delete, работает вроде в противоположную сторону как .Insert так что всё пучком! Всем спасибо кто откликнулся, сильно облегчили труд.