如何在Excel中自动删除行

时间:2012-08-04 17:29:47

标签: 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  |  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日是星期六和星期日。我不能只删除每一行,因为列表中可能有几天丢失(就像2011-03-17的情况一样)。

这可能与公式或VBScript有关吗?我之前从未编写过VBScript宏(我从来没有使用它)所以我希望得到一些帮助。

4 个答案:

答案 0 :(得分:1)

诀窍是你不需要删除那些行,你需要将它们的C和D值替换为0.这是在两个新列C'和D中使用IF()和WEEKDAY()最简单的方法。 '引用C和D.随意删除C和D.

答案 1 :(得分:1)

如果你只需要做一次,这就是我要做的。这应该保留顺序,但如果你真的担心它,请阅读帖子的结尾:

  1. 添加新列,将其命名为“Is Weekend”。在其中,放=if(WEEKDAY(B2, 2) > 5, 1, 0)。将该公式拖拽整个表格。

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

    • 在Excel 2007+上,转到数据 - >点击“过滤”
    • 在Excel 2003上,转到数据 - >过滤器 - >自动过滤。
  3. 按降序排列最后一列(Is Weekend)的所有内容。这应该将所有周末行放在一起而不改变其他行之间的顺序。

  4. 在“Is Weeked”列中删除1的所有行。删除该列。

  5. 如果您真的担心保留订单,在执行上述操作之前,您可以执行以下操作:

    1. 添加名为“位置”的新列。将1放在第一行,将第2行放入第二行,选择它们并将其向下拖动到底部,这样每行都有自己的位置编号。
    2. 执行上述过滤。
    3. 完成后,按“位置”列按升序对所有内容进行排序。

答案 2 :(得分:1)

您可以使用array formula一次性完成此操作。在单元格E2中,输入以下公式(在一行上),并使用 Ctrl - Shift - 输入进行确认(相反)到常规输入

=INDEX($A$2:$D$5000, SMALL(IF(WEEKDAY($B$2:$B$5000,2)>5, "",
    ROW($B$2:$B$5000)-MIN(ROW($B$2:$B$5000))+1), ROW(A1)),COLUMN(A1))

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

您可以从新工作表的单元格E2开始,而不是从单元格A2开始。在这种情况下,您需要将原始工作表名称添加到公式中的每个参考,如OriginalSheet!$A$2

此公式是对Excel: Remove blank cells

中给出的公式的改编

答案 3 :(得分:1)

如果您决定删除行,请确保从最后一行到第一行运行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