删除除excel VBA列范围以外的所有列

删除除excel VBA列范围以外的所有列,excel,vba,Excel,Vba,我在excel中有数百个我不需要的列。我想保留一个范围 现在我有 Sub DeleteClms () Range("A:G,L:O").Delete End Sub 在其他语言中,我会简单地把a=!,这是一个相反的说法吗!。 我试过输入,但我不知道在哪里/如何输入代码 谢谢据我所知,没有Excel或VBA函数用于计算列的符号差 下面是一个快速的VBA函数。用法将是DeleteAllBut范围(“A:C,H:Q”) 嗯,我不确定你能不能用,如果我在你的情况下,我只会录制一个宏,然后选择我

我在excel中有数百个我不需要的列。我想保留一个范围

现在我有

Sub DeleteClms ()
    Range("A:G,L:O").Delete
End Sub
在其他语言中,我会简单地把a=!,这是一个相反的说法吗!。 我试过输入,但我不知道在哪里/如何输入代码


谢谢

据我所知,没有Excel或VBA函数用于计算列的符号差

下面是一个快速的VBA函数。用法将是
DeleteAllBut范围(“A:C,H:Q”)


嗯,我不确定你能不能用,如果我在你的情况下,我只会录制一个宏,然后选择我想要删除的所有列。然后进去整理一下。不,在VBA中没有一种等效的直接方法。最接近的方法是复制您想要的范围,而不是删除您不想要的范围。
Sub DeleteAllBut(rngToKeep As Range)
    Dim ws As Worksheet
    Dim rngToDelete As Range
    Dim rngColi As Range

    'Number of columns used in worksheet
    Set ws = rngToKeep.Parent
    iCols = ws.UsedRange.Columns.Count

    FirstOne = True
    For i = 1 To iCols
        Set rngColi = Range("A:A").Offset(0, i - 1)
        If Intersect(rngToKeep, rngColi) Is Nothing Then
            If FirstOne Then
                Set rngToDelete = rngColi
                FirstOne = False
            Else
                Set rngToDelete = Union(rngColi, rngToDelete)
            End If
        End If
    Next i

    Debug.Print rngToDelete.Address & " was deleted from " & ws.Name
    rngToDelete.Delete


End Sub