我写了以下宏。
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次才能完成我需要的工作。
我知道可能有一种更有效的方式,但我想在尝试别的东西之前让它以这种方式工作。
答案 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逐步执行代码,可以查看每个命令在执行时的作用,以便查看代码是否按预期运行。