删除除具有特定标题的列以外的所有列

时间:2013-05-16 21:31:11

标签: excel vba excel-vba

我正在尝试格式化导出的数据,需要删除多个列。我想保留某些标题的列。为方便起见,如果我有15列,并希望保留具有以下标题的列;

国 市 名称 客户 产品

我担心的是我导出的数据可以更改,并且可以在将来添加列。我希望能够过滤掉不需要的列,并保留上述列。

编辑:我正在使用Excel,而且我以前从未写过一行代码。如初。

3 个答案:

答案 0 :(得分:12)

试试这个。

以相反的顺序迭代列,检查Select Case中的标题,然后根据需要删除。

Sub deleteIrrelevantColumns()
    Dim currentColumn As Integer
    Dim columnHeading As String

    ActiveSheet.Columns("L").Delete

    For currentColumn = ActiveSheet.UsedRange.Columns.Count To 1 Step -1

        columnHeading = ActiveSheet.UsedRange.Cells(1, currentColumn).Value

        'CHECK WHETHER TO KEEP THE COLUMN
        Select Case columnHeading
            Case "State", "City", "Name", "Client", "Product"
                'Do nothing
            Case Else
                'Delete if the cell doesn't contain "Homer"
                If Instr(1, _
                   ActiveSheet.UsedRange.Cells(1, currentColumn).Value, _
                   "Homer",vbBinaryCompare) = 0 Then

                    ActiveSheet.Columns(currentColumn).Delete

                End If
        End Select
    Next

End Sub

答案 1 :(得分:3)

我猜我们在这里谈论Excel。 如果是这样,使用while循环迭代你的列并决定保持或不保持应该做的伎俩。

Sub deleteIrrelevantColumns()
    Dim keepColumn As Boolean
    Dim currentColumn As Integer
    Dim columnHeading As String

    currentColumn = 1
    While currentColumn <= ActiveSheet.UsedRange.Columns.Count
        columnHeading = ActiveSheet.UsedRange.Cells(1, currentColumn).Value

        'CHECK WHETHER TO KEEP THE COLUMN
        keepColumn = False
        If columnHeading = "State" Then keepColumn = True
        If columnHeading = "City" Then keepColumn = True
        If columnHeading = "Name" Then keepColumn = True
        If columnHeading = "Client" Then keepColumn = True
        If columnHeading = "Product" Then keepColumn = True


        If keepColumn Then
        'IF YES THEN SKIP TO THE NEXT COLUMN,
            currentColumn = currentColumn + 1
        Else
        'IF NO DELETE THE COLUMN
            ActiveSheet.Columns(currentColumn).Delete
        End If

        'LASTLY AN ESCAPE IN CASE THE SHEET HAS NO COLUMNS LEFT
        If (ActiveSheet.UsedRange.Address = "$A$1") And (ActiveSheet.Range("$A$1").Text = "") Then Exit Sub
    Wend

End Sub

答案 2 :(得分:1)

我有类似的问题,这是适合我的代码。我认为这要简单得多。

Range("A1").Select

Do Until ActiveCell.Value = ""

    If ActiveCell.Value = "Forecast Status" _
        Or ActiveCell.Value = "Amount " _
        Or ActiveCell.Value = "Service Booking Value " _
        Or ActiveCell.Value = "Transaction Number" _
        Or ActiveCell.Value = "Last Modified by" _
        Or ActiveCell.Value = "Last Modified Date" _
        Or ActiveCell.Value = "T# Comparison" _
        Or ActiveCell.Value = "Amount Comparison" _
        Or ActiveCell.Value = "Forecast Status Comparison" _
        Or ActiveCell.Value = "First Ship Date Comparison" Then

        ActiveCell.Offset(0, 1).Select

    Else

        ActiveCell.EntireColumn.Select
        Selection.Delete Shift:=xlToLeft
        Selection.End(xlUp).Select

    End If
Loop