复制或删除第一行中指定名称的列。 Excel VBA

ID Student Name 34534 22222 Block Project 56653 11111 Rocket Science 12222 33333 Big Bang Project 13245 44465 Explosive Science 88888 59833 Audio Analytics 

以上只是数据的一个微型描述,因为我有超过80列的数据。 由于我们可以随时编辑或添加列,所以如何根据第一行数据添加或删除名称列? 删除:

 Dim vNoCopy As Variant, v As Long vNoCopy = Array(5, 6, 7, 11, 13) With altwb.Sheets("CRIMS_ams_report_all_ccr") For v = UBound(vNoCopy) To LBound(vNoCopy) Step -1 .Columns(vNoCopy(v)).EntireColumn.Delete Next v .Copy After:=activeWB.Sheets(activeWB.Sheets.Count) End With 

所以在删除中,我使用数字声明列的位置并相应地删除它。 是否可以将数组的数组更改为第一行? (Id,学生,姓名等)增加:

 data.Columns("A").Copy .Range("A" & myCount) 'Change Columns("A") into something like student? ID? 

列的副本非常简单。 这些的任何捷径?

您可以使用Application.Match检索列的序号(数字),并使用它来标识要删除的列。

 Dim vNoCopy As Variant, v As Long vNoCopy = Array("Name", "Student", "Id") With altwb.Sheets("CRIMS_ams_report_all_ccr") For v = UBound(vNoCopy) To LBound(vNoCopy) Step -1 if cbool(application.countif(.rows(1), vNoCopy(v))) then _ .Columns(application.match(vNoCopy(v), .rows(1), 0)).EntireColumn.Delete Next v .Copy After:=activeWB.Sheets(activeWB.Sheets.Count) End With 

假定没有拼写错误(但可以是非区分大小写的)并且列存在。 我已经添加了COUNTIF ,在尝试删除它之前检查该列是否存在。 没有检查,任何失败都会导致程序崩溃。