【问题标题】:Deleting columns with given header/name删除具有给定标题/名称的列
【发布时间】:2020-12-12 14:29:10
【问题描述】:

我正在尝试从 B 列开始删除第一行中名为“delete”的列。第一列的名称不同,“隐藏”,因为在这里我放置了一些对行执行更改的命令(未包含在下面的代码中),因此开始从 B 中删除列很重要。

我的代码删除列如下:

A(删除必须保留)、B(已删除)、C(未删除)、D(已删除)、E(未删除),尽管我用“删除”命名了从 B 到 E 的所有内容。

Sub deleting()
      
    Dim lcolumn As Long ' column
    Dim j As Long
    
    Dim sh As Worksheet, shs As Sheets
    Dim wkbTarget As Workbook
    
    For Each sh In ActiveWorkbook.Worksheets ' here's a loop through each sheet
    
        sh.Select
        With ActiveSheet
    
            lcolumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
    
            For j = 1 To lcolumn
                If .Cells(1, j).Value = "delete" Then 'here is something wrong...
                    sh.Columns(j).Delete Shift:=xlShiftToLeft
                End If
            Next j
    
        End With
    
    Next sh
End Sub

【问题讨论】:

  • 1. 删除行sh.Select 2.With ActiveSheet 更改为With sh 3. 更改For j = 1 To lcolumnFor j = lcolumn To 1 Step -1 4.If .Cells(1, j).Value = "delete" 更改为 If Ucase(Trim(.Cells(1, j).Value)) = "DELETE" 现在试试吧
  • 对不起.. 第 3 点应该是 3。For j = 1 To lcolumn 更改为 For j = lcolumn To 2 Step -1

标签: excel vba loops


【解决方案1】:

您需要向后迭代,您正在删除一列,然后将所有列推到左侧。因此,您将跳过一列,删除每一列。

所以不是

For j = 1 To lcolumn
    If .Cells(1, j).Value = "delete" Then 'here is something wrong...
        sh.Columns(j).Delete Shift:=xlShiftToLeft
    End If
Next j

你想要

for j = lcolumn to 2 step -1 'to 2 because you want to skip column A
   If .Cells(1, j).Value = "delete" Then 
       sh.Columns(j).Delete Shift:=xlShiftToLeft
   End If
Next j

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2015-03-31
    • 2012-06-20
    • 2018-03-20
    相关资源
    最近更新 更多