2016-06-08 2 views
1

То, что я пытаюсь сделать:VBA - удаление строк, основанных на ячейку, содержащую определенные слова + добавление строк на основе значения ячейки

Экспортный первенствовать документ из Salesforce. Я пытаюсь удалить некоторые строки на основе условия, а затем добавить строки на основе другого набора условий. Будучи новым для VBA, я просматривал форумы и искал несколько примеров кода, но не могу заставить их работать полностью.

Добавление строк:

Колонка C = Количество. Необходимо добавить строки ниже в зависимости от значения в столбце C. Если количество = 3 - я хочу добавить 2 пустых строки ниже. Если количество = 4 - 3 пустые строки ниже ...

Пробовал:

Sub BlankLine() 

Dim Col As Variant 
Dim BlankRows As Long 
Dim LastRow As Long 
Dim R As Long 
Dim StartRow As Long 

    Col = "C" 
    StartRow = 15 
    BlankRows = 1 

     LastRow = Cells(Rows.Count, Col).End(xlUp).Row 

     Application.ScreenUpdating = False 

     With ActiveSheet 
For R = LastRow To StartRow + 1 Step -1 
If .Cells(R, Col) > 1 Then 
.Cells(R + 1, Col).EntireRow.Insert Shift:=xlDown 
End If 
Next R 
End With 
Application.ScreenUpdating = True 

End Sub 

Это работает, но только добавляет одну строку ниже - мне нужно, чтобы добавить строки на основе значения столбца C = 'количество'.

Удаление Ряды:

имен столбцов A = продукта. Если какое-либо имя продукта содержит MAINT или APP, мне нужно удалить эту строку. Пробовал:

Sub test() 

With ActiveSheet 
.AutoFilterMode = False 
With Range("A1", Range("A" & Rows.Count).End(xlUp)) 
    .AutoFilter 1, "*Maint*" 
    On Error Resume Next 
    .Offset(1).SpecialCells(12).EntireRow.Delete 
End With 
.AutoFilterMode = False 
End With 
End Sub 

Это также работает, но удаляет верхний ряд после его завершения, поэтому я теряю некоторую информацию.

Любые предложения о том, как подойти к этому, очень ценятся!

+0

'добавить строки на основе значения столбца C', пожалуйста, объясните. – findwindow

+0

Если, например, C4 имеет количество «4» - я бы хотел добавить 3 пустых строки ниже – bliq

+0

Что относительно C5 ?. – findwindow

ответ

0
If .Cells(R, Col) > 1 Then 
    numRows = val(.Cells(R, Col)) - 1 
    For i = 1 to numRows 
     .Cells(R + 1, Col).EntireRow.Insert Shift:=xlDown 
    Next i 
End If 
+0

Im получение ошибки для этого - в строке "numRows = val (.Cells (R , Col) - 1 ". Могли бы вы разместить весь код, который вы использовали бы - спасибо! – bliq

+0

К сожалению, вышли из закрывающей круглой скобки. См. Выше. –

0

Как для вставки строк

For R = LastRow To StartRow + 1 Step -1 
    With .Cells(R, Col) 
     If .Value > 1 Then .Offset(1).Resize(.Value).EntireRow.Insert 
    End With 
Next R 

В то время как для фильтрации и удаления

Sub test() 
With ActiveSheet 
    .AutoFilterMode = False 
    With .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) 
     .AutoFilter Field:=1, Criteria1:=Array("*Maint*", "*APP*"), Operator:=xlFilterValues 
     If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then .Offset(1).Resize(.Rows.Count -1).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    End With 
    .AutoFilterMode = False 
End With 
End Sub 
+0

@bliq вы прошли через это? – user3598756

Смежные вопросы