0

我写了以下宏。

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 次才能完成我需要的操作。

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

4

1 回答 1

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 单步执行代码可让您查看每个命令在执行时的作用,以便您查看代码是否按预期运行。

于 2013-10-07T05:04:15.653 回答