【问题标题】:Excel VBA- copy and insert row based on cell valueExcel VBA-根据单元格值复制和插入行
【发布时间】: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


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多