2012-04-24 123 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