使用特定列名称复制粘贴数据

时间:2015-03-20 13:26:32

标签: excel vba excel-vba

我有一个非常基本的知识和VBA但是由于使用其他编程语言进行编码,我想一想,如果我可以使用vba-excel中的特定列名复制粘贴数据。我到目前为止使用下面的代码但是想要克服,因为我经常陷入困境。

ThisWorkbook.Worksheets("Sheets2").Activate
lastrow = Worksheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row + 1
Range("B2:B" & lastrow).Copy Worksheets("Sheet1").Range("a65536").End(xlUp).Offset(1, 2)
Range("A2:A" & lastrow).Copy Worksheets("Sheet1").Range("a65536").End(xlUp).Offset(1, 1)
Application.CutCopyMode = False

这会将Sheet2中的A和B列复制到Sheet1中的B和C列。我现在可以做一些像

这样的事情
Sheet2.colname.copy Sheet1.colname.offset 

我很好奇,感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:2)

我经常在复杂的代码中引用Const所指的列,因此我可以通过' name'来引用它们。

Const ItemNumCol = 1
Const DescCol = 2
Const CostCol = 3
etc...

它不是自动的,但通过在全球范围内声明它们,它可以最大限度地减少重新排列列的痛苦,并且可以防止我每两分钟重新回到电子表格中。

使用示例

Dim ws1 as Worksheet
Dim ws2 as Worksheet
Set ws1 = ThisWorkbook.Worksheets("Sheets1")
Set ws2 = ThisWorkbook.Worksheets("Sheets2")
LastRow = ws2.UsedRange.Rows.Count + 1
ws.range(cells(2,DescCol),cells(LastRow,DescCol).copy ws1.range(ws1.UsedRange.Rows.Count + 1, DescCol)

你可能需要翻转" Row,Col" Cells()中的引用,我永远不会记得它们走哪条路,但VBE IDE中的IntelliSense会告诉你。

答案 1 :(得分:1)

事实上,如果你只想使用名字,你就不能这样做,也许在表格中(选择你的专栏并添加一个数组)但不确定......

使用这样的东西:

Sheet2.colname.copy Sheet1.colname.offset 

你可以使用:

Sheet2.columns(index).copy Sheet1.columns(index).offset 

索引是从1开始的数字,您可以使用简单的For结构找到它,然后将结果注入副本说明中! ;)

这是一种方法:

Sub MasterCopy()

    Copy_Columns 0, 0

End Sub

这是一个例程,它将帮助您使用下面的函数(如果您只想在一个例程中将它们联合起来,则可以重用参数)

Sub Copy_Columns(ByVal HorizontalOffset As Integer, ByVal VerticalOffset As Integer)

    Dim ColCopy As Integer
    Dim ColPaste As Integer


    ColCopy = GetColName("SheetCopy", "ColToCopy")
    ColPaste = GetColName("SheetPaste", "ColToPaste")

    Sheets("SheetCopy").Columns(ColCopy).Copy Sheets("SheetPaste").Columns(ColPaste).Offset(VerticalOffset, HorizontalOffset)

End Sub

因此,您可以在任何地方使用该功能在特定工作表中按名称查找列

Public Function GetColName(ByVal SheetName As String, ByVal ColName As String)

        For j = 1 To Sheets(SheetName).Cells(1, 1).End(xlToRight).Column
            If LCase(Sheets(SheetName).Cells(1, j)) <> LCase(Column_Name) Then

            Else
                GetColName = j
                Exit For
            End If
        Next j

            If IsEmpty(GetColName) Then GetColName = 0

End Function

享受! ;)