2016-09-09 2 views
0

Я думал, что это может быть сделано лучше как массив, но не уверен, как это сделать. То, как я делаю это сейчас не дает результатов Я ищу:Удалить Столбец, если значение не равно в массиве

Sub DeleteColumns_Cash() 
Set dltRange = Range("A1:ZZ1") 
For Each cell In dltRange 
    If cell.Value <> "AMOUNT" Or cell.Value <> "TRANTYPE" Or cell.Value <> "CCY" Or cell.Value <> "SECID" Or cell.Value <> "SECDESC" Or cell.Value <> "FUND" Then 
    cell.EntireColumn.Delete 
    End If 
Next 
End Sub 
+0

Две вещи. Когда вы ищете то, что это не то, используйте 'And' not' Or' в инструкции if. Во-вторых, вам нужно будет использовать цикл 'For' и цикл loop for. –

ответ

0
Sub DeleteColumns_Cash() 
    Dim arr 
    arr = Array("AMOUNT", "TRANTYPE", "CCY", "SECID", "SECDESC", "FUND") 
    Set dltRange = Range("A1:ZZ1") 
    For Each cell In dltRange 
     If IsError(Application.Match(cell.Value, arr, 0)) Then 
      cell.EntireColumn.Delete 
     End If 
    Next 
End Sub 
0

Изменение условного оператора в Select Case statement и петли в обратном направлении.

Option Explicit 

Sub DeleteColumns_Cash() 
    Dim i As Long 

    With ActiveSheet 
     With .Range("A1:ZZ1") 
      For i = .Columns.Count To 1 Step -1 
       Select Case LCase(.Cells(1, i).Value2) 
        Case "amount", "trantype", "ccy", "secid", "secdesc", "fund" 
         'do nothing 
        Case Else 
         .Cells(1, i).EntireColumn.Delete 
       End Select 
      Next i 
     End With 
    End With 

End Sub 

Changing With Activesheet в With Worksheets("xxxxxxx") где ххххххх является фактическим именем листа, подлежащей обработке, также рекомендуются.

Смежные вопросы