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

我有一个非常基础的知识和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 

我只是好奇,任何帮助表示赞赏。 谢谢。

事实上,如果你只是想使用名称,你不能做一般的,也许在表(select你的列和添加一个数组),但不知道…

使用这样的东西:

 Sheet2.colname.copy Sheet1.colname.offset 

您可以使用 :

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

索引是一个从1开始的数字,你可以用一个简单的For结构find它,然后在你的拷贝指令中注入你的结果! ;)

这是一个方法来做到这一点:

 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 

因此,您可以在任何地方使用该function,通过名称在特定工作表中查找您的列

 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 

请享用! ;)

我经常在整个复杂的代码中为我指的列声明Const ,所以我可以用'name'来引用它们。

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

这不是自动的,而是通过在全球范围内宣布它们,将重新排列列的痛苦降至最低,并防止我不得不返回到电子表格来每2分钟计数一次。

用法示例

 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) 

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