使用列标题将表格数据复制到另一张工作表

问题描述 投票:0回答:1

我想使用列标题名称而不是列号将数据从表中的某些列复制到另一个工作表。
如果第一列名为“ID”,请将此列称为 Range("ID") 而不是 Range("A")。

Sub Program()
    Dim ws1 As Worksheet, ws2 As Worksheet, lRow As Long
    Dim table As ListObject
    Set ws1 = ThisWorkbook.Sheets("WeeklyData")
    Set ws2 = ThisWorkbook.Sheets("MonthlyData")
    Set table = ws1.ListObjects.Item("WeeklyTable")
   
    'Find first empty row where values should be pasted in MonthlyData sheet
    With Worksheets("MonthlyData")
        j = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
    End With
   
    'Find last row of data in WeeklyData sheet
    lRow = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row

    'Only copy data if WeeklyData sheet has data
    If lRow > 1 Then
        With ws1
             table.ListColumns("ID").DataBodyRange.Copy Destination.PasteSpecial xlPasteValues=ws2.range("A" & j)
        End With
    End If
   
End Sub
excel vba copy-paste
1个回答
4
投票

如果您只需要传输值,您可以直接进行,无需复制/粘贴:

Sub Program()
   
   Dim ws1 As Worksheet, ws2 As Worksheet, lRow As Long
   Dim table As ListObject, j As Long
   
   Set ws1 = ThisWorkbook.Sheets("WeeklyData")
   Set ws2 = ThisWorkbook.Sheets("MonthlyData")
   Set table = ws1.ListObjects.Item("WeeklyTable")
   
   'Find first empty row where values should be pasted in MonthlyData sheet
   With Worksheets("MonthlyData")
        j = .Cells(.Rows.Count, "B").End(xlUp).row + 1
   End With
   
   'Only copy data if WeeklyData sheet has data
   If Application.CountA(table.DataBodyRange) > 0 Then
     CopyValues table.ListColumns("ID").DataBodyRange, ws2.Range("A" & j)
     '...other columns here
   End If
   
End Sub

'copy values from `rngSrc` to `rngDest`
Sub CopyValues(rngSrc As Range, rngDest As Range)
    rngDest.Cells(1).Resize(rngSrc.Rows.Count, _
                            rngSrc.Columns.Count).Value = rngSrc.Value
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.