【问题标题】:Copy and paste selected dynamic data columns from one sheet to another sheet将选定的动态数据列从一个工作表复制并粘贴到另一个工作表
【发布时间】:2018-11-29 13:34:19
【问题描述】:

我想将工作表 1 中特定列的数据复制到工作表 2 中的特定列。有 20 个这样的列,并且该映射保存在类似

的表中

我已经编写了代码来搜索列名(源和目标表),但我无法将数据从源列(动态范围)复制到目标列。

 Sub search_validate()

    Dim j As Integer

    Dim sourcSearch, destSearch As String
    Dim sCell, dCell As Range

    For j = 3 To 20

        sourcSearch = Sheet6.Range("Z" & j).Value ' pickup selected source column name 
        destSearch = Sheet6.Range("AA" & j).Value ' pickup selected destination column name 

        Set sCell = Sheet1.Rows(2).Find(What:=sourcSearch, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

        Set dCell = Sheet2.Rows(2).Find(What:=destSearch, LookIn:=xlValues, _
          LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
          MatchCase:=False, SearchFormat:=False)

    '  sCell.Address or sCell.Column to get source column header address but data starts after this column. dynamic range

    '  dCell.Address or dCell.Column to get destination column header address. no data in destination column except header.

    Next j

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    这应该将数据附加到目标列的末尾

        If Not sCell Is Nothing And Not dCell Is Nothing Then
            Dim Source As Range, Target As Range
            Set Source = Intersect(Sheet1.UsedRange, sCell.EntireColumn).Offset(1)
            Set Target = Sheet2.Cells(Sheet2.Rows.Count, dCell.Column).End(xlUp).Offset(1)
            Source.Copy Destination:=Target
        End If
    

    【讨论】:

    • 这很好用,但唯一的问题是从我不想要的源中复制标题。我们怎样才能删除它?
    • 没关系。只是把这条线改成了这条线,它工作得完美无缺。设置 Source = Intersect(Sheet1.UsedRange, sCell.EntireColumn).Offset(2)
    • 哦,我没有注意到您的标题从第 2 行开始。感谢您接受我的回答!
    【解决方案2】:

    您需要在当前表格的最后一行之后粘贴新数据吗? 你可以用这个找到最后一行:

    lastRow = Columns("Enter your column number here").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    

    然后复制粘贴,如下所示:

    Set copyRange = Range(YOUR RANGE HERE)
     copyRange.Copy
    Cells(lastRow + 1, "Enter your column number here").PasteSpecial Paste:=xlPasteValues
    

    【讨论】:

    • 没有。宏运行时,将自动清除目标工作表数据。所以不需要追加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2021-11-18
    相关资源
    最近更新 更多