删除列的功能需要运行6次才能按预期工作

时间:2013-10-07 04:15:51

标签: excel vba

我写了以下宏。

Sub SeasonTeas()
Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
Dim ArrSize As Long
ArraySize = lastColumn - 1
Dim elem As Long
ReDim SelectColumns(ArraySize)
For x = 1 To (lastColumn)
    If Cells(1, x).Value <> "respid" And Cells(1, x).Value <> "status" And Cells(1, x).Value <> "CID" Then
        Columns(x).Select
        Selection.Delete Shift:=xlToLeft
    End If
Next x
End Sub

我需要找到与respid / status / CID不匹配的列,并删除其他所有内容。

它需要运行6次才能完成我需要的工作。

我知道可能有一种更有效的方式,但我想在尝试别的东西之前让它以这种方式工作。

1 个答案:

答案 0 :(得分:3)

您需要最多运行宏六次才能获得所需结果的原因是,当您删除列时,其余列会向左移动,并且紧接在已删除列右侧的列不会在下一个循环迭代中测试。

例如,第1列被删除,因此第2列成为第1列,但在下一个循环中,x = 2,因此新列1未经过测试。

Sub SeasonTeas2()
Dim lastColumn As Long
Dim x As Long

'Define your last column
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column

'Step backwards from your  last column
For x = lastColumn To 1 Step -1
    If Cells(1, x).Value <> "respid" And Cells(1, x).Value <> "status" And Cells(1, x).Value <> "CID" Then
        Columns(x).Delete Shift:=xlToLeft
    End If
Next x
End Sub

使用F8逐步执行代码,可以查看每个命令在执行时的作用,以便查看代码是否按预期运行。