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

时间:2014-10-13 07:47:59

标签: excel vba excel-vba copy

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?

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

1 个答案:

答案 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以检查列是否存在。如果没有检查,任何失败都会导致程序崩溃。