2

列名 (列の最初の行の値) で指定したものを除いて、スプレッドシート内のすべての列を選択したい。列名は Sub に入る引数として渡されます。例:

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"

列引数に実際には列名ではない文字列が含まれていても、コードが壊れていなければ良いでしょう。

4

1 に答える 1

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
于 2012-04-24T16:03:45.327 に答える