【发布时间】:2015-09-24 05:09:19
【问题描述】:
我正在努力做到这一点:
列 G ========> 新列 G
2 1
2
2 1
2
1 1
1 1
2 1
2
我查看了许多不同的问题来回答这个问题,但我认为我的代码不正确,因为我想在最初 G = 2 时复制整行并将其直接插入下方,而不是通常将其复制到另一张纸优秀。
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
【问题讨论】:
-
您是要复制它还是要根据旧列中的值对新列进行编号?我不太明白你想做什么。
-
我想插入一个新行而不是一个新列。我想根据现在存在的数字将 G 列中的值更改为 1 或 2。如果有帮助,我的初始列中有时间值(“0:59:00”等),我根据以下规则更改它们:如果 G 列 = 1:00:00,忽略并移至下一行 • 如果列G > 1:00:00,将其设为第 2 小时。我现在想通过复制当前行来添加到这部分,并将新行设为第 2 小时。我在整个代码中遇到问题,所以我试图分手吧。
-
这是我的第一部分代码: Sub categorizeHours() Dim LastRow As Long Dim i As Long Dim Time1 As Date Time1 = TimeValue("01:00:00") LastRow = Range(" F" & Rows.Count).End(xlUp).Row For i = 2 To LastRow If Range("F" & i).Value Time1 Then Range("G" & i).Value = "2" End If Next i End Sub
-
插入行时,总是从底部开始向上工作。这可以避免在插入一行后根据新的当前位置使您的 i 变量失效。此外,LastRow 不必针对所有插入的行进行调整。将 For 语句更改为
For i = LastRow To 2 Step -1并查看是否可行(一旦您实际定义 LastRow 并将 1 填充到 G 列新行)。 -
丹尼斯,如果代码一次插入一个,你的反向建议是可靠的。我下面的方法是一次性完成所有插入,这使得方向没有意义。
标签: excel vba duplicates rows