Hi, just for fun heres another one with a different approach to avoid looping thru the array.
Sub DeleteUnwantedCols()
Dim BadOnes, Rng As Range, c As Range
'Create a string based array
BadOnes = "{""GC"", ""Cntr"", ""Whs"", ""QtyAll"", ""Uni"", ""itm"", ""B"", ""Prod""," & _
"""Cat"", ""sts"", ""ShelfOK"", ""QS"", ""BPC"", ""La"", ""Res""}"
'Presuming header is in row 2
If IsEmpty([IV2]) Then
Set Rng = Range("A2", Range("IV2").End(xlToLeft))
Else
Set Rng = Range("A2:IV2")
End If
'Loop thru range
For Each c In Rng
'eg pretending cell value is Whs this is the same as this formula
'=SUM(IF({"GC","Cntr","Whs"... etc}="Whs",1,0))
If Evaluate("SUM(IF(" & BadOnes & "=""" & c & """,1,0))") > 0 Then c.EntireColumn.Delete
Next c
End Sub