如何根据数字数组删除多个列(可能是非连续的)?

时间:2017-06-18 19:56:52

标签: excel vba excel-vba

假设您有一个数字数组,它们是您要删除的列号。一个明智的想法是将它们转换为字母,然后将它们连接起来并删除所有列,如here所示{@ 3}}。但是有一个问题,似乎字符串里面有一个上限,所以说

str = "AB:AB,CJ:CJ,CZ:CZ,NJ:NJ,NK:NK,NL:NL...",
Len(str)=300, 'Just about 50 columns, not too many indeed, there are 16384 columns in Excel 2010!!!

如果您使用Range(str).Delete Shift:=xlToLeft,有可能会出现错误,如何解决此问题?

1 个答案:

答案 0 :(得分:1)

另一个选择

Option Explicit

Public Sub DeleteColumns()
    Dim i As Long, arr As Variant

    arr = Split("3-5-7", "-") 'ascending order

    Application.ScreenUpdating = False
    With Sheet1
        For i = UBound(arr) + 1 To LBound(arr) + 1 Step -1
            .Cells(Val(arr(i - 1))).EntireColumn.Delete
        Next
    End With
    Application.ScreenUpdating = True
End Sub

(对于大量列来说速度很慢)