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

时间:2014-10-01 16:37:42

标签: excel vba excel-vba

我一直在寻找答案,但我找不到那么具体的答案。

我正在尝试编写宏,这对于没有任何编程知识的人来说很容易使用。

因此,我们使用定价模板,您可以在其中查看许多不同国家/地区的价格。我想创建一个宏,它将复制整个选项卡并删除不需要的列取决于它创建文件的国家/地区。 (需要保留公式,我仍然希望所有的计算都不是值。)

因此,对于所有国家/地区来说,前几列将保留,因此应删除除选定范围之外的所有列。范围在单独的选项卡中指定,并将存储在数组中。

实施例: 比利时 第一栏:CJ 最后一栏:CQ

因此,让我们先说出第一个循环第一列和最后一列的值,我希望宏删除从H到CI的列,然后从CR到HF。

但是在下一个循环中,first和last将会改变,因此删除范围必须重新计算。

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

1 个答案:

答案 0 :(得分:0)

好吧,如果您已经知道要使用的范围,那么这样的子程序可以删除一系列列,减去异常范围。

我只是循环遍历列并检查交叉点。如果被测试列与异常范围之间没有交集,我们将其添加到要删除的列列表中。

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

您可以使用命名范围来跟踪要删除的列。那个或列标题和循环查找某个值,如特定行中的国家/地区代码。