【问题标题】:Copy paste to column on two sheets复制粘贴到两张纸上的列
【发布时间】:2021-06-13 14:36:03
【问题描述】:

我在同一个工作簿中有两张工作表。我想将数据从 A 列复制到两个工作表中的下一个空列。

我在粘贴代码行时遇到错误。

Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("Sheet1").Select

    Range("A1:A6").Select
    Selection.Copy
    Range("B1").Select
    Selection.PasteSpecial Paste:=xlPasteValues.Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
    Range("A8").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
    Sheets("Sheet2").Select
    Range("A1:A6").Select
    Selection.Copy
    Range("B1").Select
    Selection.PasteSpecial Paste:=xlPasteValues.Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
    Range("A9").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
    Range("A10").Select
End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    复制列

    Option Explicit
    
    Sub copyColumn()
        
        Dim wb As Workbook: Set wb = ThisWorkbook  ' workbook containing this code
        
        Dim sws As Worksheet: Set sws = wb.Worksheets("Sheet1")
        Dim srg As Range: Set srg = sws.UsedRange.Columns(1)
        Dim drg As Range
        
        Set drg = sws.Cells(1, sws.Columns.Count).End(xlToLeft) _
            .Offset(, 1).Resize(srg.Rows.Count)
        drg.Value = srg.Value
        
        Dim dws As Worksheet: Set dws = wb.Worksheets("Sheet2")
        
        Set drg = dws.Cells(1, dws.Columns.Count).End(xlToLeft) _
            .Offset(, 1).Resize(srg.Rows.Count)
        drg.Value = srg.Value
        
    End Sub
    

    【讨论】:

      【解决方案2】:

      为了更清晰的代码,变量 ws1 对应于 Sheet1,类似地 ws2 对应于 Sheet2

      Sub RangeCopy()
      
      Dim ws1 As Worksheet
      Dim ws2 As Worksheet
      Set ws1 = Sheets("Sheet1")
      Set ws2 = Sheets("Sheet2")
      
      EmptyCol_Sheet1 = ws1.Cells(1, Columns.Count).End(xlToLeft).Column + 1
      EmptyCol_Sheet2 = ws2.Cells(1, Columns.Count).End(xlToLeft).Column + 1
      
      ws1.Range(Cells(1, EmptyCol_Sheet1).Address, Cells(6, EmptyCol_Sheet1).Address).Value = ws1.Range("A1:A6").Value
      ws2.Range(Cells(1, EmptyCol_Sheet2).Address, Cells(6, EmptyCol_Sheet2).Address).Value = ws2.Range("A1:A6").Value
      
      End Sub
      

      在评论中您的问题后更新:

      Sub RangeCopy()
      
      Dim ArrLen As Variant
      Dim SheetsArray As Variant
      Dim SheetsArrayLength As Integer
      
      SheetsArray = Array("Sheet1", "Sheet2", "Sheet3") 'Add more SheetsName
      SheetsArrayLength = UBound(SheetsArray) - LBound(SheetsArray) 'it count items in array for loop
      
      For i = 0 To SheetsArrayLength
          EmptyCol_Sheet = Worksheets(SheetsArray(i)).Cells(1, Columns.Count).End(xlToLeft).Column + 1
          Worksheets(SheetsArray(i)).Range(Cells(1, EmptyCol_Sheet).Address, _
          Cells(6, EmptyCol_Sheet).Address).Value = Worksheets(SheetsArray(i)).Range("A1:A6").Value
      Next i
      
      End Sub
      

      【讨论】:

      • 你好蒂姆非常感谢你的帮助。它工作得很好。如果我需要添加更多工作表,我该怎么做?
      • 更新了我的答案,现在只需将工作表名称添加到数组中
      • 谢谢蒂姆。代码按我的需要工作正常。就一个问题。如果我的列包含数字,我如何自动对每列末尾的每一列求和,添加新列。就像我的范围是 A1 :A6 所以总和应该出现在每列的第 7 行。我会很感激你的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多