【问题标题】:VBA Delete column where first cell is a string of arrayVBA删除第一个单元格是数组字符串的列
【发布时间】:2016-11-14 21:20:17
【问题描述】:

我有一个 Excel 文件,我想在其中删除无用的列。

假设我有 4 列:“ID”、“姓名”、“姓氏”、“工作”。我要做的是删除所有不是“ID”和“Job”的列。

我尝试使用 Range.Find 方法,但显然有些地方我弄错了。

任何帮助表示赞赏

myArray = Array("ID", "Job")
'Delete columns which title aren't in myArray
For j = mycol To 1 Step -1 'col by col
    For k = 0 To 4 'for each element in myArray
        ' Delete col where no elements of myArray are present.
        Columns(j).Delete
    Next k
Next j

编辑: 列名是指每列的第一行。所以 A1=ID,B1=Name 等等。

【问题讨论】:

  • 列名是什么意思?它只是某行单元格中的标题还是您正在使用表格(ListObjects)?
  • @KazimierzJawor 列名是指每列的第一行。所以 A1=ID,B1=Name 等等。
  • @Daniel Mc 检查下面我的答案中的代码,如果这就是您在帖子中的意思,请告诉我
  • @ShaiRado 这正是我的意思。我不敢相信我没有发现这么明显的东西。谢谢
  • @DanielMc 不客气

标签: vba excel excel-2010


【解决方案1】:

或者你可以尝试一些更简单的方法:

For j = myCol To 1 Step -1 'col by col
    'check if column name is in array
    If IsError(Application.Match(Cells(1, j), myArray, 0)) Then
        Columns(j).Delete
    End If

Next j

【讨论】:

  • 这是一个非常好的方法,不知道它存在!
  • @KazimierzJawor 这是一个很好更干净的答案
【解决方案2】:

下面的代码将遍历所有列(根据您的mycol 值),并检查第一行中的标题是否与myArray 数组中的任何元素匹配。

Sub DeleteColumns_NotinArray()

Dim myArray
Dim j As Long, k As Long, mycol As Long
Dim ColHeadrFound   As Boolean

myArray = Array("ID", "Job")

' just for my testing
mycol = 10

'Delete columns which title aren't in myArray
For j = mycol To 1 Step -1 'col by col

    ' reset flag
    ColHeadrFound = False
    For k = 0 To UBound(myArray) 'for each element in myArray
        If Cells(1, j).Value = myArray(k) Then
            ColHeadrFound = True
            Exit For
        End If
    Next k
    ' Delete column where no elements of myArray are present
    If ColHeadrFound = False Then
        Columns(j).EntireColumn.Delete
    End If

Next j


End Sub

【讨论】:

    猜你喜欢
    • 2014-03-20
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    相关资源
    最近更新 更多