2012-04-24 120 views
2

我想選擇電子表格中的所有列,但通過列名指定的列(列的第一行中的值)列名將作爲參數傳入一個Sub例如:從Excel/VBA中排除選擇的列

Sub selectAllExcept(columns) 
With ActiveSheet 
    LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
End With 
Range(Columns(1), Columns(LastCol)).EntireColumn.Select 
End Sub 

然而,不知何故,我希望能夠指定我想不包括由列參數中指定的,這是我設想作爲一個逗號分隔字符串的所有列(第一個到最後一個) :

columns = "ColumnName1, ColumnName3" 

這也將是好的,如果代碼沒有破壞如果co lumns參數包含一個實際上不是列名的字符串。

+0

什麼是列名?來自列的第一個單元格的值? – GSerg 2012-04-24 15:54:55

+0

是的,謝謝澄清。 – mike 2012-04-24 15:56:09

回答

4
Sub SelectAllExcept(ByVal except_those As String) 
    Dim cn() As String 
    cn = Split(except_those, ",") 

    Dim i As Long, j As Long 
    For i = LBound(cn) To UBound(cn) 
    cn(i) = Trim$(cn(i)) 
    Next 


    Dim r As Range 

    For i = 1 To ActiveSheet.UsedRange.Columns.Count 
    If Not is_in_array(cn, ActiveSheet.Cells(1, i).Value) Then 
     If r Is Nothing Then 
     Set r = ActiveSheet.Columns(i) 
     Else 
     Set r = Application.Union(r, ActiveSheet.Columns(i)) 
     End If 
    End If 
    Next 

    If Not r Is Nothing Then 
    r.Select 
    End If 
End Sub 

Private Function is_in_array(arr() As String, val As String) As Boolean 
    Dim i As Long 

    For i = LBound(arr) To UBound(arr) 
    If StrComp(arr(i), val, vbTextCompare) = 0 Then 
     is_in_array = True 
     Exit Function 
    End If 
    Next 
End Function 
+0

+ 1 :)很好完成! – 2012-04-24 16:50:58