将列单元格从活动行复制到新行

Posted

技术标签:

【中文标题】将列单元格从活动行复制到新行【英文标题】:Copy column cells from active row to new row 【发布时间】:2019-07-19 15:48:59 【问题描述】:

我需要在活动单元格下方添加一行,然后将活动行中 E-J 列的单元格复制到新插入的行。

Sub Addrow()
    
    ActiveCell.Offset(1).EntireRow.Insert
    
    Range(Cells(ActiveCell.Row, "E"), Cells(ActiveCell.Row, "F"), Cells(ActiveCell.Row, "G"), Cells(ActiveCell.Row, "H"), Cells(ActiveCell.Row, "I"), Cells(ActiveCell.Row, "J")).Select
    
    Selection.Copy
    Range(Cells(ActiveCell.Offset(1), "E")).Select
    ActiveSheet.Paste
        
End Sub

我认为问题在于插入新行后选择单元格范围。

【问题讨论】:

插入后删除所有其他行并用这一行替换它们:Range(Cells(ActiveCell.Row, "E"), Cells(ActiveCell.Row, "J")).Copy Cells(ActiveCell.Offset(1).Row, "E") 【参考方案1】:

其中一个问题可能是您不能为 Range 函数提供超过 2 个参数。

此外,您通常希望避免在代码运行时依赖工作表或范围处于活动状态(因为 ActiveSheetActiveCell 可能会更改,这可能会使您的代码行为不可预测/不可靠)。

Intersect 是一个函数,它将返回其所有参数共享的范围。在这种情况下,它返回范围 columns E to J 和范围 row of the Active cell 共有的单元格。

Range.Copy 接受 Destination 参数,因此您可以直接将目标范围传递给它。

Sub AddRow()

    Dim selectedCell As Range
    Set selectedCell = ActiveCell

    Dim parentSheet As Worksheet
    Set parentSheet = selectedCell.Parent

    selectedCell.Offset(1, 0).EntireRow.Insert xlShiftDown

    With Intersect(parentSheet.Range("E:J"), selectedCell.EntireRow)
        .Copy .Offset(1)
    End With

End Sub

我确实测试了代码,它似乎做了你描述的事情(即从选定的行复制并粘贴到它下面新插入的行)。

【讨论】:

以上是关于将列单元格从活动行复制到新行的主要内容,如果未能解决你的问题,请参考以下文章

每次活动单元格更改行时更新单元格值

在 Excel 中将某些特定单元格从一个工作表复制到另一个工作表的 VBA 可能是啥?

VBA - 仅将可见单元格从工作表复制到另一个工作表

Python - 如何根据单元格从 CSV 中删除重复的单元格/行

将表格视图单元格从一个表格视图移动到新的表格视图

用于将行插入活动单元格下方的指定列范围的宏