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
所以在删除时,我正在使用数字声明列的位置并相应地删除它。是否可以将数字数组更改为单词的第一行? (身份证,学生,姓名等) 此外:
data.Columns("A").Copy .Range("A" & myCount) 'Change Columns("A") into something like student? ID?
列的副本非常简单。这些的任何捷径?
答案 0 :(得分:1)
您可以使用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
以检查列是否存在。如果没有检查,任何失败都会导致程序崩溃。