Excel VBA - 删除范围内的每第3列和第4列
问题描述:
试图找出如何删除范围内的每第3列和第4列。Excel VBA - 删除范围内的每第3列和第4列
我知道我可以在范围内删除列有:
Columns("C:E").EntireColumn.Delete
但无法弄清楚如何删除只有每3楼和4 ...
答
如先前通过@ YowE3K提到的,如果要求是目前尚不清楚:
- 删除每列是多个3或4(即列3,4,6,8,9,12,15,16,18,20,21,24等)或
- 删除每列4列中的第3列和第4列(即列3,4,7 ,8,11,12,15,16,19,20,23,24等)。
所以我对每一种情况下提供分离的解决方案:
这些解决方案的工作UsedRange
是符合要求内删除一次所有列。
1.Delete每列,它是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列
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” 列(根据自己的需要修改表的名字):
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
+0
我假设OP希望从第一列开始(每隔三分钟表示日常使用的语言),并且您的代码也可以从第二列或第三列开始。莫弗,我不认为所有非空列都必须考虑,但目标范围的列。 – z32a7ul
答
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
“C; E”引用与您的标题不匹配的第3,4和5列。删除第3列和第4列后,第5列变为第3列。您可能需要从右边开始,并在删除时向左移动,以便列数没有变化或向右移动,以便列数已更改。你怎么知道要删除的最右边一列?您可以使用数字而不是字母来识别列,以便可以轻松设置合适的循环。 –
您是否想要删除每个第3列和第4列(即列3,4,6,8,9,12,15,16,18,20,21,24等)或第3列和第4列4列组(即3,4,7,8,11,12,15,16,19,20,23,24等栏)? – YowE3K