excel - 删除所有工作表中除指定列外的所有列

标签 excel vba

我想删除 Excel 工作簿的所有工作表中的所有列,除了以下名称的列:

Date
Name
Amount Owing
Balance

以下代码在事件工作表中运行:

Sub DeleteSelectedColumns()
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

'Check whether to preserve the column
    Select Case columnHeading
    'Insert name of columns to preserve
        Case "Date", "Name", "Amount Owing", "Balance"
            'Do nothing
        Case Else
            'Delete the column
            ActiveSheet.Columns(currentColumn).Delete
        End Select
    Next
End Sub

如何修改此代码以应用于所有工作表?

最佳答案

您正在寻找这样的东西:

Sub DeleteSelectedColumns()

    Dim ws As Worksheet
    Dim rDel As Range
    Dim HeaderCell As Range
    Dim sKeepHeaders As String
    Dim sDelimiter as String

    sDelmiter = ":"
    sKeepHeaders = Join(Array("Date", "Name", "Amount Owing", "Balance"), sDelimiter)

    For Each ws In ActiveWorkbook.Sheets
        Set rDel = Nothing
        For Each HeaderCell In ws.Range("A1", ws.Cells(1, ws.Columns.Count).End(xlToLeft)).Cells
            If InStr(1, sDelimiter & sKeepHeaders & sDelimiter, sDelimiter & HeaderCell.Value & sDelimiter, vbTextCompare) = 0 Then
                If Not rDel Is Nothing Then Set rDel = Union(rDel, HeaderCell) Else Set rDel = HeaderCell
            End If
        Next HeaderCell
        If Not rDel Is Nothing Then rDel.EntireColumn.Delete
    Next ws

End Sub

关于excel - 删除所有工作表中除指定列外的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50515150/

相关文章:

vba - 用于修改未知名称打开工作簿中的单元格值的命令按钮

c# - Excel Interop - 效率和性能

python-3.x - Python Pandas SUMIF excel 等价物

vba - 当值为 null 时,访问自定义属性的值会出现 'Out of Memory' 错误

vba - CurrentDb.OpenRecordset 在 VBA 中的使用

excel - 保存文件时忽略斜线

vba - 工作表上的多个切换按钮以触发宏

c# - Excel:如果使用绝对路径只能打开文件,为什么?

regex - 仅匹配可能重复也可能不重复的数字和点 (.)

vba - 根据条件创建新的单元格值