【发布时间】:2022-01-27 20:20:12
【问题描述】:
我的 excel 文件中有两张工作表:
输入表: Sheet1
目标表: Sheet2
我想要实现的是将值从我在单元格C5 中定义的列开始粘贴,并从我在单元格C6 中定义的行开始粘贴。如果单元格C5和C6定义的范围已经有数据,那么它将根据单元格C5中的列找到下一个空行并将数据粘贴到该空行中。
例如在上面的屏幕截图中,单元格C5和C6中定义的起始列和行是B8,因此复制的值将从单元格B8开始粘贴,直到E8。但是,如果该行已经有数据,那么它将根据 B 列(即B9)找到下一个空行并将其粘贴到那里。
我不确定如何修改我当前的脚本:
Public Sub CopyData()
Dim InputSheet As Worksheet ' set data input sheet
Set InputSheet = ThisWorkbook.Worksheets("Sheet1")
Dim InputRange As Range ' define input range
Set InputRange = InputSheet.Range("G6:J106")
Dim TargetSheet As Worksheet
Set TargetSheet = ThisWorkbook.Worksheets("Sheet2")
Const TargetStartCol As Long = 2 ' start pasting in this column in target sheet
Const PrimaryKeyCol As Long = 1 ' this is the unique primary key in the input range (means first column of B6:G6 is primary key)
Dim InsertRow As Long
InsertRow = TargetSheet.Cells(TargetSheet.Rows.Count, TargetStartCol + PrimaryKeyCol - 1).End(xlUp).Row + 1
' copy values to target row
TargetSheet.Cells(InsertRow, TargetStartCol).Resize(ColumnSize:=InputRange.Columns.Count).Value = InputRange.Value
End Sub
任何帮助或建议将不胜感激!
测试场景 1
测试场景 1 的输出
【问题讨论】:
-
能否解释一下为什么第一行数据重复了5次?
-
因为我运行脚本5次,所以输出是这样的,再次运行脚本会覆盖第二行
-
你试过我的解决方案了吗?你能告诉它有什么问题吗?没关系,我知道该怎么做。
-
是的,我也测试过,输出是一样的
标签: excel vba copy-paste