如何select和删除每个第三列

我有一组数据,每三列都是一样的。 我只想留下第一列和其他相同的必须删除。

起初我试过这个代码,但是它删除了错误的列,因为在每个循环中,其他列的位置都被改变了。

Sub DeleteMultipleColumns() Dim i As Integer Dim LastColumn As Long Dim ws As Worksheet Set ws = Sheets("Arkusz2") LastColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column ws.Activate For i = 4 To (LastColumn - 2) ws.Columns(i).Select Selection.Delete Shift:=xlToLeft i = i + 3 Next i End Sub 

在此之后,我尝试了另一个使用联盟。 它不工作:

 Sub DeleteMultipleColumns() Dim i As Integer Dim LastColumn As Long Dim ws As Worksheet Set ws = Sheets("Arkusz2") LastColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column ws.Activate For i = 4 To (LastColumn - 2) Application.Union.Columns(i).Select i = i + 3 Next i Selection.Delete Shift:=xlToLeft End Sub 

那么该怎么做呢?

我的新想法是尝试一个数组。 我还有其他的select吗?

这是我已经实现了很好的答案之后的代码(谢谢:sam092,meohow,mattboy):

 Sub DeleteMultipleColumns() Dim i As Integer Dim LastColumn As Long Dim ws As Worksheet Application.ScreenUpdating = False Set ws = Sheets("Arkusz2") LastColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column - 2 For i = LastColumn To 4 Step -3 ws.Columns(i).Delete Shift:=xlToLeft Next i Application.ScreenUpdating = True End Sub 

反转方向。 开始从右边删除。 我想你知道如何修改你的代码

你可以这样倒退 另外,在删除之前不需要select列,您可以直接删除它。

 For i = ((LastColumn \ 4) * 4) To 4 Step -4 ws.Columns(i).Delete Shift:=xlToLeft Next i 

我赞成Mattboy的代码是最干净的

这是可能的避免范围循环和使用数组,因为你build议,虽然我张贴这更多的踢,因为数组的一代是棘手的

用途是否可以填充行号符合一定的标准没有循环的数组?

 Sub OneinThree() Dim ws As Worksheet Dim rng1 As Range Dim x As String Set ws = ActiveSheet Set rng1 = Cells(1, ws.Cells(1, Columns.Count).End(xlToLeft).Column - 2) x = Join(Filter(Application.Evaluate("=IF(MOD(column(A1:" & rng1.Address & "),3)=0,address(1,column(a1:" & rng1.Address & ")),""x"")"), "x", False), ",") If Len(x) > 0 Then ws.Range(x).EntireColumn.Delete End Sub