我正在尝试将固定的列范围(D20:D39)复制到一个空列,例如K20:K39。每次我更新(D20:D39)时,列都会不断更新,即当我要复制(D20:D39)时,K,L,M,N ...将得到更新。我不精于编码或计算机科学,只是想使我的电子表格高效。有人能帮忙吗?
我看过其他一些线程,但大多数提到将其复制到单独的工作表中。没有人提到这种“滚动”复制n粘贴机制。
答案 0 :(得分:0)
以下内容将计算使用的最后一列(在第20行中,因为我们将复制到该行),然后将一列的值设置为与D20到D39范围相同的值:
Sub coppercopy()
Dim lastcol As Integer
lastcol = Sheets("Sheet1").Cells(20, Columns.Count).End(xlToLeft).Column
Range(Cells(20, lastcol + 1), Cells(39, lastcol + 1)).Value = Range("D20:D39").Value
Range(Cells(42, lastcol + 1), Cells(32, lastcol + 1)).Value = Range("D42:D62").Value
End Sub
如果要复制和粘贴而不是将值设置为与范围相同,请使用以下方法:
Sub coppercopy()
Dim lastcol As Integer
lastcol = Sheets("Sheet1").Cells(20, Columns.Count).End(xlToLeft).Column
Range("D20:D39").copy
Cells(20, lastcol + 1).PasteSpecial xlPasteValues
End Sub
编辑,第一个选项被编辑为包括更多范围。这可以在同一行上完成,但是出于代码可读性和易用性的考虑,我将其放在了新的一行上。请注意,与Cells(
语句不同,Range(
语句始终采用R1C1表示法。表示它引用了Cells(Row number, Column number)
。请记住,通过更新到正确的单元格引用,可以轻松地将其更新为包括要复制的任何范围。
第二次修改:
根据注释,范围需要更加动态,同时在复制时仍要摆脱sum
公式。以下子节适用于此。它将从D20开始的整个范围复制到最后一个填充的行,并根据需要将其复制到下一个可用列。然后,它会遍历整个复制的范围 +1 (这是为了说明需要删除范围的末尾的sum
公式),以及是否发现空白(表示新的“段落”),它会删除上方的单元格(总是最后一段的sum
公式)。
Sub coppercopy()
Dim lastcol As Integer, lastr As Integer, cel As Range
lastcol = Sheets("Sheet1").Cells(20, Columns.Count).End(xlToLeft).Column 'determine last column with values
lastr = Sheets("Sheet1").Range("D" & Rows.Count).End(xlUp).Row 'determine last row with values
Range(Cells(20, lastcol + 1), Cells(lastr, lastcol + 1)).Value = Range("D20:D" & lastr).Value 'copy range to column after last used one
For Each cel In Range(Cells(20, lastcol + 1), Cells(lastr + 1, lastcol + 1)) 'If the copied range does not end with a sum formula, omit the `+ 1` after `lastr`.
If cel.Value = "" Then 'loops over all cells and checks for blanks
cel.Offset(-1, 0).Value = "" 'if blank is found, delete cell above
End If
Next cel
End Sub