【问题标题】:How to automatically insert a blank row after a group of data如何在一组数据后自动插入一个空白行
【发布时间】:2013-03-03 06:58:02
【问题描述】:

我在下面创建了一个示例表,它与我在 excel 中的表足够相似,它应该可以用来说明问题。我想简单地在 column1 中的每个不同数据之后添加一行(最简单的方法,使用 excel,谢谢)。

_

当前表:

column1   |   column2   |  column3
----------------------------------
  A       |     small   |  blue
  A       |     small   |  orange
  A       |     small   |  yellow
  B       |     med     |  yellow
  B       |     med     |  blue
  C       |     large   |  green
  D       |     large   |  green
  D       |     small   |  pink

_

所需的表

注意:每个不同列之后的空白行1

column1   |   column2   |  column3
----------------------------------
  A       |     small   |  blue
  A       |     small   |  orange
  A       |     small   |  yellow

  B       |     med     |  yellow
  B       |     med     |  blue

  C       |     large   |  green

  D       |     large   |  green
  D       |     small   |  pink

【问题讨论】:

  • 为什么?如果您需要再次使用该表,那将是一件痛苦的事情。如果只是为了阅读能力,为什么不使用条件格式?
  • 这是一个公平的问题。我希望能够在使用 CTRL+向上/向下箭头编辑组时在组之间导航。并且将表格恢复为原始格式而没有任何行根本不会有任何问题。
  • Ben,我给了你一个 VBA 答案,一步一步完成
  • 您尝试过自动筛选和\或数据透视表吗?

标签: excel vba rollup blank-line


【解决方案1】:

这完全符合您的要求,检查行,并插入一个空白的空行在 A 列中的每次更改

sub AddBlankRows()
'
dim iRow as integer, iCol as integer
dim oRng as range

set oRng=range("a1")

irow=oRng.row
icol=oRng.column

do 
'
if cells(irow+1, iCol)<>cells(irow,iCol) then
    cells(irow+1,iCol).entirerow.insert shift:=xldown
    irow=irow+2
else
    irow=irow+1
end if
'
loop while not cells (irow,iCol).text=""
'
end sub

我希望这能让你开始,让我们知道!

菲利普

【讨论】:

  • 如果你愿意,我也可以给你一个没有循环的:)
  • 这是一个很棒的解决方案,但是当我将 a1 更改为 b1 或 d1 时,由于某种原因它失败了!
  • @user3844877: 那是因为cells(irow+1, 1) = 第 1 列,所以对于 b1,您需要使用 cells(irow+1, 2) 或类似 cells(irow+1, iCol) 之类的东西并将 iCol 设置为 iCol=activecell.column
  • @user3844877 我已经编辑了代码,现在试试,只需将单元格更改为oRng
  • @user3844877 你最好看看新版本的代码,因为不使用SELECTActivate 是一种更好的方法
【解决方案2】:

选择您的数组,包括列标签,DATA > Outline -Subtotal,每次更改时:column1,使用函数:Count,将小计添加到:column3,选中Replace current subtotals 和Summary below data,OK。

过滤并选择 Column1、文本过滤器、包含...、计数、确定。选择除标签之外的所有可见内容并删除内容。删除过滤器,如果需要,取消组合行。

【讨论】:

    【解决方案3】:

    如果数据不是连续的(1 2 3 4 但 5 7 3 1 5),这将不起作用,因为在这种情况下您无法对其进行排序。

    这是我为我解决这个问题的方法:

    Column A 初始数据,每个数字之间需要包含 5 行 - 5 4 6 8 9

    B 列 - 1 2 3 4 5 (最终数字表示您需要在 A 列中的数字之间存在的空行数)只要 A 列中有数字,就在 B 列中复制粘贴 1-5。

    跳转到 D 列,在 D1 中键入 1。在 D2 中键入此公式 - =IF(B2=1,1+D1,D1) 将其拖动到与 B 列相同的长度。

    返回 C 列 - 在 C1 单元格中键入此公式 - =IF(B1=1,INDIRECT("a"&amp;(D1)),"")。把它拖下来,我们就完成了。现在在 C 列中,我们有与 A 列中相同的数字序列,分别分布为 4 行。

    【讨论】:

      【解决方案4】:

      想通了。

      步骤 1

      在 column1 的左侧添加一个新列,然后复制+粘贴以下公式

      =B2=B3

      =B3=B4

      =B4=B5

      ...一直到底部(假设此处的 B 列是原始问题中的第 1 列)。

      此公式评估下一行是否是 column1 中的新值。根据结果​​,您将得到 TRUE 或 FALSE。将这些结果复制并粘贴为值,然后将“FALSE”替换为 nil,将“TRUE”替换为 0.5

      第二步

      然后将只有 0.5 的列添加到 column1,这将产生下表:

        newcolumn0  |   column1 ("B") |   column2   |  column3
      -----------------------------------------------------
                    |     1           |     small   |  blue
                    |     1           |     small   |  orange
            1.5     |     1           |     small   |  yellow
                    |     2           |     med     |  yellow
            2.5     |     2           |     med     |  blue
            3.5     |     3           |     large   |  green
                    |     4           |     large   |  green
            4.5     |     4           |     small   |  pink
      

      第三步

      最后,将 newcolumn0 中的值复制并粘贴到 column1 中的值正下方,然后按 column1 对表格进行排序,您应该在 column1 中每个不同的整数之间有一个空白行,表格如下所示:

          newcolumn0   |  column1 ("B")  |   column2       |  column3
      ---------------------------------------------------------------
                       |     1           |     small   |  blue
                       |     1           |     small   |  orange
              1.5      |     1.5         |             |
                       |     1           |     small   |  yellow
                       |     2           |     med     |  yellow
                       |     2           |     med     |  blue
              2.5      |     2.5         |             |
                       |     3           |     large   |  green
              3.5      |     3.5         |             |
                       |     4           |     large   |  green
                       |     4           |     small   |  pink
              4.5      |     4.5         |             |
      

      替代解决方案(仍然没有 VBA)

      1. 输入值 1 第 1 列第 2 行(假设这是 A2)​​
      2. 将此公式放入 A3 =IF(B3=B2,A2,A2+1) 并将此公式复制并粘贴到第 2 列的其余部分
      3. 然后将第 1 列中的所有值复制并粘贴到新的临时 Excel 工作表中,删除重复项,然后将 0.5 添加到所有数字,然后将这些值粘贴到原始电子表格中第 1 列数据下方的值下方,粘贴所有数据在列中作为值,然后按该列排序,删除临时 excel 表

      【讨论】:

      • 复制/粘贴几乎不应该是选择的答案。选择菲利普的。
      【解决方案5】:

      只是一个想法,如果您知道上面提到的小型、中型和大型类别...

      在工作表的底部,制作 3 行,分别表示小、中和大,将字体更改为白色,然后按字母顺序排序,在每个部分之间放置一个空白行。

      【讨论】:

        【解决方案6】:
        1. 在表格'Control'左侧插入一列
        2. 将数据编号为1到1000(假设有1000行)
        3. 将关键字段复制到另一个工作表并删除重复项
        4. 在第 1000 条记录之后将唯一的行项复制到主工作表
        5. 在“控制”列中,将数字 1001 添加到所有唯一记录
        6. 对数据(包括添加的记录)进行排序,首先在关键字段上,然后在“控制”上
        7. 添加了一个空行(在关键字段和“控制”中包含数据)

        【讨论】:

          【解决方案7】:

          我在 excel 中有一个处理共同基金单位买卖的大文件。工作表中的行数超过 4000。我没有使用 VBA 的经验,想使用基本的 excel。从上面建议的解决方案中得到启发,我尝试通过以下方式解决问题(自动插入空白行):

          1. 我根据控制字段对文件进行了排序
          2. 我在文件中添加了一列
          3. 我使用“IF”函数来确定控制数据何时发生变化。
          4. 如果有变化,结果将显示为“是”,否则为“否”
          5. 然后我过滤数据以对所有“是”项进行分组
          6. 我复制了共同基金名称、作品集编号等(没有财务数据)
          7. 然后我删除了过滤器并再次对文件进行了排序。结果是在所需位置添加了一行。 (它不是完全空白的行,因为如果完全空白,排序将不会将该行放在所需的位置。)
          8. 排序后,您可以轻松删除所有值以获得完全空白的行。

          这种方法读者也可以尝试一下。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-13
            • 1970-01-01
            相关资源
            最近更新 更多