2012-04-24 14 views
2

スプレッドシート内のすべての列を選択したいのですが、列名(列の最初の行の値)で指定した列を除きます。サブ例: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 

は、しかし、私は何とか私はカンマ区切りの文字列として思い描く列引数で指定されたものを除くすべての列(最初最後に)にすることを指定できるようにしたいです:

また、コードが壊れていないとlumns引数には、実際には列名ではない文字列が含まれていました。

+0

そして、列名とは何ですか?列の最初のセルからの値ですか? – GSerg

+0

はい、ありがとうございます。 – mike

答えて

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 :)うまくいった! –

関連する問題