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

Vba 删除除具有特定标题的列以外的所有列,vba,excel,Vba,Excel,我正在尝试格式化导出的数据,需要删除几列。我想保留带有特定标题的列。为了方便起见,如果我有15列,并希望保留以下标题列 陈述 城市 名称 客户 产品 我担心的是,我正在导出的数据可能会更改,并且将来可能会添加列。我希望能够过滤掉不需要的列,只保留前面提到的列 编辑:我正在使用Excel,我一生中从未写过一行代码。从来没有。我猜我们在谈论Excel。 如果是这样的话,使用while循环遍历列并决定保留还是不保留就可以了 Sub deleteIrrelevantColumns() Dim k

我正在尝试格式化导出的数据,需要删除几列。我想保留带有特定标题的列。为了方便起见,如果我有15列,并希望保留以下标题列

陈述 城市 名称 客户 产品

我担心的是,我正在导出的数据可能会更改,并且将来可能会添加列。我希望能够过滤掉不需要的列,只保留前面提到的列


编辑:我正在使用Excel,我一生中从未写过一行代码。从来没有。

我猜我们在谈论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
子删除不相关列()
Dim keepColumn作为布尔值
将currentColumn设置为整数
将列标题设置为字符串
currentColumn=1
当currentColumn时,试试这个

以相反的顺序迭代列,检查Select案例中的标题,并根据需要删除

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

我有一个类似的问题,这是为我工作的代码。我认为这要简单得多

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

擅长?通道你在用哪个程序?谢谢。我明天会测试它。我给它贴上了“VBA”的标签。这还不够清楚吗?这不管用。它删除遇到的第一个不符合“columnheading”条件的列,然后停止。再次运行它将删除不符合条件的下一列标题。当它遇到指定的列标题时,它停止并不执行任何操作。还有人有什么建议吗?奇怪,对我来说很有用。我必须承认,大卫的解决方案要整洁得多。谢谢!到目前为止,这是非常好的工作。是否有一种方法可以在“检查是否保留列”部分中包含一些内容,以检测列标题中是否有特定的单词?我意识到我有一个标题为“产品类型/产品类别”的列,但它分为两行。起初,我试图补充;Cells.Select With Selection.WrapText=False结束于,然后使用代码。但是它没有检测到标题“Product Type/Product Category”,并且一直在删除它。您可以使用
Instr
函数检查字符串中是否存在单词/字符串。谢谢!谢谢你的帮助,没问题。下面是一个正在使用的函数示例:
Instr(1,“Marge and Homer Simpson”,“Homer”,vbBinaryCompare)
0
表示未找到搜索,0以外的任何值表示已找到搜索。我如何将其合并到所选案例代码中?那么,假设荷马/辛普森是专栏的标题,我想保留那篇专栏?是的,那将是“更简单”陈述中的“错误”。