如何仅复制特定范围的单元格

时间:2013-12-10 06:13:51

标签: excel vba excel-vba

我必须在Excel VBA中设计一个函数,它将 sheet1 中的源行号和 sheet2 中的目标行号作为输入参数。但是必须复制的列在两行中都是相同的,即从第1列到第20列。

我试过这样的话:

Function CopyRow(ByVal rowA, ByVal rowB)
    Rows(rowA).Select
    Selection.Copy
    Sheets("Sheet2").Select
    Rows(rowB).Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
End Function

但它正在复制整行。给我一个替代的简单方法来做到这一点?

请帮我解决这个问题。提前谢谢。

2 个答案:

答案 0 :(得分:0)

尝试Range("A" & rowA & ":T" & rowA).Select

答案 1 :(得分:0)

您的代码正在复制整行,因为Rows(rowA).Select正在选择整个rowA

我同意之前的评论,它更适合Sub而不是Function,因为没有返回值。当您尝试更改工作表上的某些内容时,不应使用Functions - 有人可能会输入=Co并将您的CopyRow视为可用的Function。它不起作用 - 如果您在工作表上输入Function,它将返回0而不进行复制/粘贴。

如果没有选择任何工作表或范围,这样做会更快。

Function CopySht1RowAtoSht2RowB(rowA, rowB)
    Sheets("Sheet1").Range(Cells(rowA, 1).Address, Cells(rowA, 20).Address).Copy _
    Sheets("Sheet2").Range(Cells(rowB, 1).Address, Cells(rowB, 20).Address)
End Function

您可以从其他程序调用它,在本例中使用

Sub Wrapper()
Sub Wrapper()
    Call CopySht1RowAtoSht2RowB(1, 2)
End Sub