如何在Excel中自动删除行

如何在Excel中自动删除行,excel,Excel,考虑以下(部分)Excel工作表: A | B | C | D ---+-------------+-------+------- id | date | var_a | var_b 1 | 2011-03-12 | 200 | 34.22 1 | 2011-03-13 | 203 | 35.13 1 | 2011-03-14 | 205 | 34.14 1 | 2011-03-15 | 207 | 54.88 1

考虑以下(部分)Excel工作表:

A  |   B         |  C    |  D
---+-------------+-------+-------
id |  date       | var_a | var_b
1  |  2011-03-12 | 200   | 34.22
1  |  2011-03-13 | 203   | 35.13
1  |  2011-03-14 | 205   | 34.14
1  |  2011-03-15 | 207   | 54.88
1  |  2011-03-16 | 208   | 12.01
1  |  2011-03-18 | 203   | 76.10
1  |  2011-03-19 | 210   | 14.86
1  |  2011-03-20 | 200   | 25.45
.  |  .          |  .    |  .
.  |  .          |  .    |  .
2  |  2011-03-12 | 200   | 34.22
2  |  2011-03-13 | 203   | 35.13
2  |  2011-03-14 | 205   | 34.14
2  |  2011-03-15 | 207   | 54.88
2  |  2011-03-16 | 208   | 12.01
2  |  2011-03-18 | 203   | 76.10
2  |  2011-03-19 | 210   | 14.86
2  |  2011-03-20 | 200   | 25.45
.  |  .          |  .    |  .
.  |  .          |  .    |  .
实际上,共有5000多行。我需要删除所有日期在周六或周日的行。在本例中,3月12日和13日
(2011-03-12/13)
以及3月19日和20日是周六和周日。我不能每N行就删除一次,因为列表中可能会缺少几天(这里的例子是
2011-03-17


这是否可以通过公式或VBScript实现?我以前从未编写过VBScript宏(我从未使用过它),因此我希望能得到一些帮助。

诀窍是,您不需要删除这些行,您需要将它们的C和D值替换为0。在引用C和D的两个新列C'和D'中使用IF()和WEEKDAY()最容易做到这一点。然后可以随意删除C和D。

诀窍是不需要删除这些行,需要将它们的C和D值替换为0。在引用C和D的两个新列C'和D'中使用IF()和WEEKDAY()最容易做到这一点。请随意删除C和D。

如果您只需要执行一次,我会这样做。这应该可以维持秩序,但如果你真的担心,请阅读文章的最后部分:

  • 添加一个新列,称之为“IsWeekend”。在其中,放入
    =if(工作日(B2,2)>5,1,0)
    。将整个表格的公式向下拖动

  • 过滤列。为此,请选择整个表格(单击任意表格单元格,然后按Ctrl-A),然后

    • 在Excel 2007+上,转到数据->单击“筛选”
    • 在Excel 2003上,转到数据->筛选->自动筛选
  • 按最后一列(周末)按降序排序。这应该将所有周末行放在一起,而不改变其他行之间的顺序

  • 删除“已剔除”列中包含1的所有行。删除该列

  • 如果您确实担心维护秩序,在执行上述操作之前,您可以执行以下操作:

  • 添加一个名为“位置”的新列。将1放在第一行,2放在第二行,选择它们并将其向下拖动到底部,以便每一行都有其自己的位置号(按递增顺序)
  • 按上述步骤执行过滤
  • 完成后,按“位置”列按升序对所有内容进行排序

  • 如果你只需要做一次,这就是我会做的。这应该可以维持秩序,但如果你真的担心,请阅读文章的最后部分:

  • 添加一个新列,称之为“IsWeekend”。在其中,放入
    =if(工作日(B2,2)>5,1,0)
    。将整个表格的公式向下拖动

  • 过滤列。为此,请选择整个表格(单击任意表格单元格,然后按Ctrl-A),然后

    • 在Excel 2007+上,转到数据->单击“筛选”
    • 在Excel 2003上,转到数据->筛选->自动筛选
  • 按最后一列(周末)按降序排序。这应该将所有周末行放在一起,而不改变其他行之间的顺序

  • 删除“已剔除”列中包含1的所有行。删除该列

  • 如果您确实担心维护秩序,在执行上述操作之前,您可以执行以下操作:

  • 添加一个名为“位置”的新列。将1放在第一行,2放在第二行,选择它们并将其向下拖动到底部,以便每一行都有其自己的位置号(按递增顺序)
  • 按上述步骤执行过滤
  • 完成后,按“位置”列按升序对所有内容进行排序

  • 您可以使用一个按钮一次性完成此操作。在单元格
    E2
    中,输入以下公式(在一行上),然后按Ctrl-Shift-enter键确认(与常规enter键相反)

    5000表示电子表格中的行数。在此之后,公式周围应该有花括号,以指示它是一个数组公式
    E2
    应具有值
    1
    。然后选择单元格
    E2
    ,并将单元格右下角向右拖动,直到覆盖4个单元格。然后将4单元选择的右下角一直向下拖动。在底部,您将看到包含
    #NUM,每删除一行一个。您可以按常规方式删除这些内容

    您可以在新工作表的单元格
    A2
    中开始,而不是在单元格
    E2
    中开始。在这种情况下,您需要在公式中的每个引用前面加上原始图纸名称,如
    OriginalSheet$A$2


    此公式是对

    中给出的公式的改编。您可以使用。在单元格
    E2
    中,输入以下公式(在一行上),然后按Ctrl-Shift-enter键确认(与常规enter键相反)

    5000表示电子表格中的行数。在此之后,公式周围应该有花括号,以指示它是一个数组公式
    E2
    应具有值
    1
    。然后选择单元格
    E2
    ,并将单元格右下角向右拖动,直到覆盖4个单元格。然后将4单元选择的右下角一直向下拖动。在底部,您将看到包含
    #NUM,每删除一行一个。您可以按常规方式删除这些内容

    您可以在新工作表的单元格
    A2
    中开始,而不是在单元格
    E2
    中开始。在这种情况下,您需要在公式中的每个引用前面加上原始图纸名称,如
    OriginalSheet$A$2


    此公式是

    中给出的公式的改编。如果您决定删除行,请确保从最后一行到第一行运行VBA代码。下面是一段刚刚从内存中编写的代码,它向您展示了从下到上运行的思想

    For i = Selection.Rows.Count To 1 Step -1
        If WEEKDAY(Cells(r, 2),2) > 5 Then
            Selection.Rows(i).EntireRow.Delete
        End If
    Next i
    

    如果您决定删除行,请确保从最后一行到最后一行运行VBA代码
    For i = Selection.Rows.Count To 1 Step -1
        If WEEKDAY(Cells(r, 2),2) > 5 Then
            Selection.Rows(i).EntireRow.Delete
        End If
    Next i