VBA从各种工作表中的各种单元格复制到一个工作表

时间:2014-10-15 01:39:31

标签: excel vba excel-vba

我正在尝试从这些工作表中的几个工作表,不同单元格中复制值。我想知道是否有办法简化代码而不是正常的复制和粘贴。这是我一直在使用的代码,它的代码很长。

我在想是否有一个允许我告诉vba复制和粘贴的功能。然后我定义匹配的复制粘贴单元格。例如。 B2 - D3 B4 - D4等

Worksheets(stockcode & "_IS_" & marketcode).Range("B2").Copy
Worksheets(stockcode & "_Stock ratio_" & marketcode).Range("D3").PasteSpecial
Worksheets(stockcode & "_IS_" & marketcode).Range("B4").Copy
Worksheets(stockcode & "_Stock ratio_" & marketcode).Range("D4").PasteSpecial
Worksheets(stockcode & "_IS_" & marketcode).Range("B15").Copy
Worksheets(stockcode & "_Stock ratio_" & marketcode).Range("D5").PasteSpecial

2 个答案:

答案 0 :(得分:0)

这可能会有所帮助。

Dim ws as Worksheet
Set ws = Worksheets(stockcode & "_Stock ratio_" & marketcode)
With Worksheets(stockcode & "_IS_" & marketcode)
    .Range("B2").Copy Destination:=ws.Range("D3")
    .Range("B4").Copy Destination:=ws.Range("D4")
    .Range("B15").Copy Destination:=ws.Range("D5")
End With
Set ws = Nothing

如果您需要携带所有值,那么这种替代方法可能就足够了。

Dim ws as Worksheet
Set ws = Worksheets(stockcode & "_IS_" & marketcode)
With Worksheets(stockcode & "_Stock ratio_" & marketcode)
    .Range("D3") = ws.Range("B2").Value
    .Range("D4") = ws.Range("B4").Value
    .Range("D5") = ws.Range("B15").Value
End With
Set ws = Nothing

第一个使用With ... End With来引用 IS 工作表。第二种方法使用相同的方法来引用 Stock Ratio 工作表。在With ... End With内,您使用句点(也称为句号)作为前缀,以获得父关系。

使用With ... End With引用一个工作表并将第二个工作表分配给变量可能是值得的。上面编辑注意第二种方法。

答案 1 :(得分:0)

您可以创建自己的程序来完成您能想象到的任何事情。您的代码可以大大简化。

首先,我们将定义工作表和目标工作表。我们这样做是为了让我们的代码更容易阅读,解释和维护(现在只有一个地方你需要对这个混乱的连接大惊小怪:Worksheets(stockcode & "_Stock ratio_" & marketcode)

Dim srcSheet as Worksheet
Dim destSheet as Worksheet

Set srcSheet = Worksheets(stockcode & "_IS_" & marketcode)
Set destSheet = Worksheets(stockcode & "_Stock ratio_" & marketcode)

现在我们可以使用Value赋值语句,因为您只关心粘贴,您可以这样做:

destSheet.Range("D3").Value = srcSheet.Range("B2").Value
destSheet.Range("D4").Value = srcSheet.Range("B3").Value
destSheet.Range("D5").Value = srcSheet.Range("B15").Value

这完全避免了CopyPaste/PasteSpecial方法,也应该更快。

您可以创建一个将所有内容放在一起并获得更多信息的宏,它最终取决于您的用例以及您希望如何输入数据或者是否有必要(通常​​不是,因为有逻辑规则)确定表之间的关系,可以构造成代码/语法等。)

如果您只想输入信息,可以使用Application.InputBox,这是一个简单的例子:

Sub TransferValues()
Dim src as Range
Dim dest as Range

Set src = Application.InputBox("Source?", Type:=8)
Set dest = Application.InputBox("Destination?", Type:=8)

dest.Value = src.Value
End Sub

当然,这并不比手动复制/粘贴快得多(如果有的话),但它可以说明您可以实现的概念。