首页 > 解决方案 > VBA:复制一行,将其插入到上面并更改一个单元格的值

问题描述

我正在尝试找到一种方法来复制已识别行的值并将其插入到上面,除了一列之外具有相同的值。如果可能的话,最好找到一种方法来更改已识别行中的 2 个单元格。我在尝试使用 VBA 方面是全新的,所以我还没有走得很远......目前我可以插入一个空白行,但没有内容。希望更清楚,这里是我试图完成的步骤。

  1. 在 C 列中,遍历每一行并识别/操作每个包含“ITEM1_ITEM2”的行
  2. 在包含所有相同值的已识别行的上方(或下方?)插入行,但 C 列的值更改为“ITEM2”,H 列的数值减半。
  3. 已识别行的 C 列值更改为“ITEM1”,H 列值也减半。
  4. 移动到带有“ITEM1_ITEM2”的下一个标识行并完成相同的操作。

任何帮助,将不胜感激。我什至不需要完成所有步骤......即使只是弄清楚如何复制/粘贴插入行中的单元格也会有所帮助。谢谢!

Public Sub sortICs()

    Dim bottom As Long, top As Long
    Dim row As Long
    
    With ActiveSheet
        top = 1
        bottom = .UsedRange.Rows(.UsedRange.Rows.Count).row
            
        For row = bottom To top Step -1
            If .Range("C" & row).Value = "ITEM1_ITEM2" Then
                .Range("C" & row).EntireRow.Insert
            End If
        Next row
    End With
    
End Sub

标签: excelvbacopy-paste

解决方案


这会起作用:

Public Sub sortICs()

    Dim bottom As Long, top As Long
    Dim rw As Range, newRow As Range, x, i As Long
    
    With ActiveSheet.UsedRange
        For i = .Rows.Count To 2 Step -1  'work backwards so you don't interfere when inserting rows
            Set rw = .Rows(i)
            If rw.Columns("C").Value = "ITEM1_ITEM2" Then
                rw.Offset(1, 0).Insert
                Set newRow = rw.Offset(1, 0) 'the just-inserted row
                rw.Copy newRow
                
                rw.Columns("C").Value = "ITEM1"
                newRow.Columns("C").Value = "ITEM2"
                
                x = rw.Columns("H").Value / 2
                rw.Columns("H").Value = x
                newRow.Columns("H").Value = x
            End If
        Next i
    End With
    
End Sub

推荐阅读