如何将固定单元格复制到最外面的空单元格中

时间:2019-10-14 10:48:47

标签: excel

我正在尝试将固定的列范围(D20:D39)复制到一个空列,例如K20:K39。每次我更新(D20:D39)时,列都会不断更新,即当我要复制(D20:D39)时,K,L,M,N ...将得到更新。我不精于编码或计算机科学,只是想使我的电子表格高效。有人能帮忙吗?

我看过其他一些线程,但大多数提到将其复制到单独的工作表中。没有人提到这种“滚动”复制n粘贴机制。

1 个答案:

答案 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