【问题标题】:Copy a range and paste each cell value in the range to a specific new cell in excel [duplicate]复制范围并将范围中的每个单元格值粘贴到excel中的特定新单元格[重复]
【发布时间】:2014-06-08 15:53:50
【问题描述】:

我基本上需要清理我自己编写的这段代码,以免我反复复制和粘贴!请指教?

Sub cp()
Worksheets("copy").Select
Range("b2").Select
Selection.copy
Range("b7").Select
ActiveSheet.Paste
Range("c2").Select
Selection.copy
Range("e7").Select
ActiveSheet.Paste
Range("d2").Select
Selection.copy
Range("h7").Select
ActiveSheet.Paste
Range("e2").Select
Selection.copy
Range("k7").Select
ActiveSheet.Paste
end sub

【问题讨论】:

    标签: excel vba copy copy-paste


    【解决方案1】:
    Sub cp
    Dim ws as Worksheet
    Set ws = Worksheets("copy")
    ws.Range("B7") = ws.Range("B2")
    ws.Range("E7") = ws.Range("C2")
    ws.Range("H7") = ws.Range("D2")
    ws.Range("K7") = ws.Range("E2")
    
    End Sub
    

    ??

    尽可能避免选择、复制和粘贴。尝试直接引用所需的单元格、范围、工作表和工作簿。所以这里的改进可能是指定工作簿

    Dim wb as workbook
    Set wb = workbooks("MyWorkbook")
    dim ws as worksheet
    Set ws = wb.Sheets("copy")
    ...
    

    这样,excel 将永远不会对您所指的单元格感到困惑。打开工作簿或创建新工作簿时特别方便。

    Dim wb as workbook
    Set wb = workbooks.add 'Creates a new workbook, and binds it to the variable wb, so you always know any action on wb is being done to that new workbook
    

    希望对大家有所帮助

    编辑 - 回应您的评论--

    您可以使用 Cells 代替 Range,它采用行号和列号而不是列字母-

    Dim x as Integer
    Dim ws as Worksheet
    Set ws = Worksheets("copy")
    For x = 2 to 500
        ws.Cells(7,x) = ws.Cells(2,x)
    Next x
    

    尝试在 For 循环上设置断点,然后按 F8 单步执行。我不完全理解你想要的模式(将 B 向下移动 5 行,将 C 中的值移动到 E 等),但如果你可以调整它以满足你的需要,听起来你将有足够的时间来完成你的项目

    【讨论】:

    • 谢谢。参考您的初始代码,我想将其扩展到 500/600 个单元格,因此无需复制和粘贴 500 次即可达到 AA7 AE7 AH7 等。请多多包涵,我是 VBA 新手。谢谢
    猜你喜欢
    • 2021-03-18
    • 2017-02-06
    • 2018-09-06
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多