簡體   English   中英

VBA-EXCEL除去指定范圍以外的列

[英]VBA - EXCEL Remove columns except specified range

我一直在尋找答案,但找不到如此具體的答案。

我正在嘗試編寫宏,對於沒有任何編程知識的人來說,它很容易使用。

因此,我們使用定價模板,您可以在其中查看許多不同國家/地區的價格。 我想創建一個宏,該宏將復制整個選項卡並刪除不想要的列,具體取決於它要創建文件的國家。 (需要保留公式,我仍然希望所有計算都沒有值)。

因此,前幾列將保留,因為它們在所有國家/地區都是通用的,然后應刪除除選定范圍之外的所有列。 范圍在單獨的選項卡中指定,並將存儲在數組中。

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

因此,假設在第一個循環中存儲了第一列和最后一列的值,我希望宏從H到CI刪除列,然后從CR到HF刪除列。

但是,在下一個循環中,第一個和最后一個將更改,因此刪除范圍必須重新計算。

我嘗試使用公式ASC和CHR,但不適用於兩個字母代碼。

好吧,如果您已經知道要使用的范圍,那么像這樣的子例程可以刪除一個列范圍,減去一個例外范圍。

我只是遍歷各列並檢查交叉點。 如果要測試的列與異常范圍之間沒有交集,則將其添加到要刪除的列列表中。

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

您可以使用命名范圍來跟蹤要刪除的列。 那或列標題和一個循環,在特定行中尋找某些值,例如國家/地區代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM