根据名称删除列(第一个值)

时间:2015-09-24 20:03:42

标签: excel vba

我使用宏来快速搜索大型学生数据表并将其合并到一个单元格中以用于座位计划(我是一名教师)。大部分都有效,但我只选择了我需要的数据。

步骤:
1.删​​除数据 2.运行公式以检查学生是否适合特定群体并合并他们的信息 3.格式

不同的主题和年份组的数据布局不同,因此这一步骤给我带来了问题。我已尝试在步骤2中使用绝对单元格引用,但这并不起作用,因为有时列D中的信息位于E列等。

我想要做的是有一个宏来检查列中的第一个值(即标题),如果它没有匹配预定列表中的一个,则删除整个列和它# 39; s数据。

Dim rng As Range
For Each rng In Range("everything")

If rng.Value = "Test" Or rng.Value = "Test1" Then
    rng.EntireColumn.Hidden = True
End If

如果我可以将隐藏列的输出更改为删除它,我想我可以使用这样的东西吗?

1 个答案:

答案 0 :(得分:0)

  

re:我想要做的是有一个宏来检查列中的第一个值(即标题),如果它没有匹配预定列表中的一个,则删除整个列以及它的数据。

删除所有列 NOT WITHIN 列表:

Sub del_cols()
    Dim c As Long, vCOL_LBLs As Variant

    vCOL_LBLs = Array("BCD", "CDE", "DEF")

    With Worksheets("Sheet7")       '<~~ set this worksheet reference properly!
        For c = .Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
            If IsError(Application.Match(.Cells(1, c), vCOL_LBLs, 0)) Then
                .Columns(c).Delete
            End If
        Next c
    End With
End Sub

要删除所有列 WITHIN 列表:

Sub del_cols()
    Dim v As Long, vCOL_LBLs As Variant

    vCOL_LBLs = Array("BCD", "CDE", "DEF")

    With Worksheets("Sheet7")       '<~~ set this worksheet reference properly!
        For v = LBound(vCOL_LBLs) To UBound(vCOL_LBLs)
            Do While Not IsError(Application.Match(vCOL_LBLs(v), .Rows(1), 0))
                .Cells(1, Application.Match(vCOL_LBLs(v), .Rows(1), 0)).EntireColumn.Delete
            Loop
        Next v
    End With
End Sub