VBA – EXCEL删除指定范围以外的列

我正在寻找答案,但我找不到一个如此具体。

我正在努力写macros,这将很容易使用的人没有任何编程知识。

所以我们使用定价模板,你可以看到许多不同国家的价格。 我想创build一个macros,它将复制整个选项卡,并删除不需要的列取决于从哪个国家创build文件。 (需要保留公式,我仍然想要所有的计算不值)。

因此,前几列将保留,因为它们对于所有国家都是通用的,然后删除除选定范围之外的所有列。 范围在单独的选项卡中指定,并将存储在数组中。

示例:比利时第一列:CJ最后一列:CQ

因此,我们假设在第一个循环中第一列和最后一列的值被存储,并且我想macros从H删除列到CI,然后从CR到HF。

但是在下一个循环中,首先和最后一个将会改变,所以删除范围必须重新计算。

我尝试使用公式ASC和CHR,但它不适用于两个字母代码。

那么,如果你已经知道你想使用的范围,像这样的子程序可以删除一个列的范围,减去一个例外范围。

我只是遍历列并检查一个交叉点。 如果被testing列和exception范围之间没有交集,我们将其添加到要删除的列列表中。

Public Sub RemoveColumnsExcept(removeRange As Range, exceptRange As Range) Dim deletionRange As Range Dim columnRange As Range For Each columnRange In removeRange.Columns If Intersect(columnRange, exceptRange) Is Nothing Then If deletionRange Is Nothing Then Set deletionRange = columnRange Else Set deletionRange = Union(deletionRange, columnRange) End If End If Next columnRange If Not deletionRange Is Nothing Then deletionRange.Delete xlShiftToLeft End If End Sub Public Sub Test() RemoveColumnsExcept Sheet1.[B:J], Sheet1.[G:I] End Sub 

您可以使用命名范围来跟踪要删除的列。 这或列标题和一个循环寻找一些特定的行像国家代码的价值。