【问题标题】:Delete all Excel columns except those named删除所有 Excel 列,但命名的列除外
【发布时间】:2016-06-30 16:41:35
【问题描述】:

我正在尝试修改我找到的一些代码。我需要看两行,而不仅仅是一排。 我加了这个。但不确定如何完成此操作以将其包含在循环中。请有人帮忙。

Sub DeleteColumns()
    Dim currentColumn As Integer
    Dim columnHeading As String
    Dim columnHeading2 As String

    For currentColumn = ActiveSheet.UsedRange.Columns.Count To 1 Step -1
        columnHeading = ActiveSheet.UsedRange.Cells(1, currentColumn).Value

    'Check whether to preserve the column
        Select Case columnHeading
        'Insert name of columns to preserve
            Case "NET EFFECTIVE", "OUTGOINGS"
                'Do nothing
            Case Else

            Select Case columnHeading2
            Case "HKD/sq.ft", "USD/sq.m."

            Case Else

                'Delete the column
                ActiveSheet.Columns(currentColumn).Delete
            End Select
        Next
    End Sub

【问题讨论】:

  • 您是在问如何将columnHeading2 设置为列中第二个单元格的值?如果是这样,只需在 columnHeading 分配中将 1 替换为 2。您还缺少End Select

标签: excel vba


【解决方案1】:

您的代码采用不同的方法。这个对我有用

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

    For currentColumn = ActiveSheet.UsedRange.Columns.Count To 1 Step -1
        columnHeading = ActiveSheet.UsedRange.Cells(1, currentColumn).Value

If columnHeading = "One" Or columnHeading = "Two" Then
    GoTo label
    Else
    ActiveSheet.Columns(currentColumn).Delete
End If
label:
Next
End Sub

只需将"One""Two" 替换为您想要的列名即可。您可以扩展IF 条件以满足您的需求

【讨论】:

  • 感谢您的帮助。反正有没有加快速度呢?一次性删除所有不需要的列?
  • 加速到底是什么意思?如果对您有帮助,请随时将其标记为答案:)
【解决方案2】:

谢谢你!

我做了一点改变,它起作用了!!

Sub DeleteColumns()
    Dim currentColumn As Integer
    Dim columnHeading As String
    Dim columnHeading1 As String

    For currentColumn = ActiveSheet.UsedRange.Columns.Count To 1 Step -1
        columnHeading = ActiveSheet.UsedRange.Cells(4, currentColumn).Value
        columnHeading1 = ActiveSheet.UsedRange.Cells(5, currentColumn).Value

If columnHeading1 = "HKD/sq.ft" Or columnHeading1 = "USD/sq.m." Or columnHeading = "Outgoings" Or columnHeading = "Net effective" Then
    GoTo label
    Else
    ActiveSheet.Columns(currentColumn).Delete
End If
label:
Next
End Sub

【讨论】:

    【解决方案3】:

    您的工作代码可以简化如下:

    Sub DeleteColumns()
        Dim currentColumn As Integer
        Dim columnHeading As String
        Dim columnHeading1 As String
    
        With ActiveSheet.UsedRange
            For currentColumn = .Columns.Count To 1 Step -1
                columnHeading = .Cells(4, currentColumn).Value
                columnHeading1 = .Cells(5, currentColumn).Value
                If Not (columnHeading1 = "HKD/sq.ft" Or columnHeading1 = "USD/sq.m." Or columnHeading = "Outgoings" Or columnHeading = "Net effective") Then .Columns(currentColumn).Delete
            Next currentColumn
        End With
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2018-02-01
      • 2016-02-10
      • 1970-01-01
      相关资源
      最近更新 更多