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

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

州市名称客户端产品

我担心的是,我输出的数据可能会改变,列可能会在未来添加。 我想能够过滤掉不需要的列,只是保留上述列。

编辑:我正在使用Excel,我从来没有写在我的生活之前的代码行。 永远。

试试这个。

按相反顺序遍历列,检查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 

我猜我们在这里说Excel。 如果是这样循环遍历你的列,并决定保持或不保持应该做的伎俩。

 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 

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

 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