2015-07-06 8 views
0

Я пытаюсь сделать это:Excel VBA- копирование и вставка строки на основе значения ячейки

колонка G ========> новый столбец G

2       1 

          2 

2       1 

          2 

1       1 

1       1 

2       1 

          2 

Я посмотрел на множество разных вопросов, чтобы ответить на это, но я считаю, что мой код неверен, потому что я хочу скопировать всю строку, когда первоначально G = 2, и вставлять ее прямо под собой вместо обычной копии на другой лист в excel.

Sub duplicate() 
Dim LastRow As Long 
Dim i As Integer 
For i = 2 To LastRow 
If Range("G" & i).Value = "2" Then 
    Range(Cells(Target.Row, "G"), Cells(Target.Row, "G")).Copy 
    Range(Cells(Target.Row, "G"), Cells(Target.Row, "G")).EntireRow.Insert Shift:=xlDown 
End If 
Next i 
End Sub 

Большое вам спасибо за помощь!

Excel VBA automation - copy row "x" number of times based on cell value

+0

Вы пытаетесь скопировать или вы желая номер нового столбца на основе значений в старой колонке? Я не совсем понимаю, что вы пытаетесь сделать. – PermaNoob

+0

Я хочу вставить новую строку, а не новый столбец. Я хочу изменить значение в столбце G на 1 или 2 на основе числа, которое существует в нем сейчас. Если это помогает, в моей начальной колонке были значения времени («0:59:00» и т. Д.), И я изменил их в соответствии с этим правилом: если столбец G = 1:00:00, проигнорируйте и перейдите к следующей строке • \t Если столбец G> 1:00:00, сделайте это Часом 2. Теперь я хочу добавить к этой части, скопировав текущую строку и сделав новую строку Час 2. У меня были проблемы с кодом в целом, поэтому я был пытаясь разбить его. – newbie91

+0

Это была моя первая часть кода: Sub categorizeHours() Dim LastRow As Long Dim я As Long Dim Time1 Как Дата TIME1 = TIMEVALUE ("01:00:00") LastRow = Range ("F" & Rows.Count) .End (xlUp) .Row Для i = 2 Для LastRow Если диапазон («F» & i). Значение Time1 Then Range ("G" & i) .Value = "2" End If Next i End Sub – newbie91

ответ

0
Public Sub ExpandRecords() 

    Dim i As Long, s As String 
    Const COL = "G" 

    For i = 1 To Cells(Rows.Count, COL).End(xlUp).Row 
     If Cells(i, COL) = 2 Then 
      s = s & "," & Cells(i, COL).Address 
     End If 
    Next 
    If Len(s) Then 
     Range(Mid$(s, 2)).EntireRow.Insert 
     For i = 1 To Cells(Rows.Count, COL).End(xlUp).Row 
      If Cells(i, COL) = vbNullString Then 
       Cells(i, COL).Value = 1 
      End If 
     Next 
    End If 

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