Excel VBA – 删除范围内的每个第3和第4列

试图找出如何删除范围内的每第三和第四列。

我知道我可以删除范围内的列:

Columns("C:E").EntireColumn.Delete

但不知道如何删除只有每一个第三和第四…

正如@ YowE3K先前所提到的,目前尚不清楚是否要求:

  1. 删除每个3或4倍数的列(即3,4,6,8,9,12,15,16,18,20,21,24等列)或
  2. 删除每栏4列(即3,4,7,8,11,12,15,16,19,20,23,24等)的第3栏和第4栏。

因此,我为每种情况提供了一个单独的解决scheme:

这些解决scheme立即删除工作表UsedRange中符合要求的所有列。

1.删​​除每个3或4的倍数的列

 Sub Delete_Every_Column_Multiple_Of_3_or_4() Dim rTrg As Range, iLstCol As Integer, i As Integer With ThisWorkbook.Sheets("Sht(1)") 'Change as required iLstCol = .UsedRange.SpecialCells(xlLastCell).Column For i = 1 To iLstCol If i <> 1 And (i Mod 3 = 0 Or i Mod 4 = 0) Then If rTrg Is Nothing Then Set rTrg = .Columns(i) Else Set rTrg = Union(rTrg, .Columns(i)) End If: End If: Next rTrg.EntireColumn.Delete End With End Sub 

2.每列4列删除第3和第4列

 Sub Delete_3rd_And_4th_Column_in_Every_Group_of_Four() Dim rTrg As Range Dim iLstCol As Integer Dim i As Integer With ThisWorkbook.Sheets("Sht(2)") 'Change as required iLstCol = .UsedRange.SpecialCells(xlLastCell).Column For i = 1 To iLstCol If i Mod 4 = 0 Or i Mod 4 = 3 Then If rTrg Is Nothing Then Set rTrg = .Columns(i) Else Set rTrg = Union(rTrg, .Columns(i)) End If: End If: Next rTrg.EntireColumn.Delete End With End Sub 

在这里输入图像说明 两个案件之前的列。

在这里输入图像说明 两种情况之后的列。

下面的代码删除“Sheet1”中的第3和第4列(根据需要修改表名):

 Option Explicit Sub DeleteEvery_ThirdFourthCol() Dim LastCol As Long Dim Col As Long ' modify "Sheet1" to your sheet's name With Sheets("Sheet1") ' find last column with data in row 1 > modify to your needs LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column ' loop columns backwards when deleting For Col = LastCol To 1 Step -1 If Col Mod 3 = 0 Or Col Mod 4 = 0 Then .Range(.Cells(1, Col), .Cells(1, Col)).EntireColumn.Delete End If Next Col End With End Sub 
 Public Sub DeleteEveryThirdColumn() Const EveryN As Long = 3 Dim rng As Range: Set rng = ActiveSheet.Range("C:F") Dim c As Long: For c = ((rng.Columns.Count - 1) \ EveryN) * EveryN + 1 To 1 Step -EveryN rng.Columns(c).Delete Next c End Sub