对表格的行进行分组和排序

对表格的行进行分组和排序

我有一张表,其中列A中的每个单元格都包含一个唯一值。列B要么为空,要么包含数字。

   |    A    | B 
---+---------+---
 1 | Gamma   | 1 
 2 | Echo    | 5 
 3 | Alpha   |   
 4 | Foxtrot | 3 
 5 | Bravo   |   
 6 | Charlie | 1 
 7 | Delta   |   

我想对表格进行排序,使B列中具有非空值的行出现在该列中具有空白的行之前。 中具有非空值的行B也需要按列的字母顺序排序A。 其他行的排序顺序无关紧要。

结果看起来应该是这样的:

   |    A    | B 
---+---------+---
 1 | Charlie | 1 
 2 | Echo    | 5 
 3 | Foxtrot | 3 
 4 | Gamma   | 1 
 5 | Alpha   |   
 6 | Bravo   |   
 7 | Delta   |   

截至目前,列中的空白单元格B完全是空的,甚至不包含计算结果为空字符串的公式。将来,这种情况可能会改变。我不知道这是否会影响任何答案。

答案1

那里实际上不隐藏行,不过滤,单身的-sort 解决方案。它只需要在列中添加一个简单的条件格式公式B

显示条件格式规则的工作表屏幕截图

选择B2:B8,确保B2是活动单元格,然后添加新的公式条件格式规则。将规则的字体颜色更改为 以外的任何颜色Automatic,然后输入以下内容作为公式:

=B2=""

请注意,虽然显示了标题行,但这不是必需的。(请参阅我的其他答案了解更多详情。


现在,要获得所需的结果,您需要执行以下两级排序:

显示排序顺序的工作表屏幕截图

  1. B按列Font Color排序Automatic On Top
  2. A按列Values排序A to Z

通过在条件格式规则中使用填充颜色而不是字体颜色并进行排序,可以实现相同的效果Cell Color。(通过使用字体颜色,可以更简单地使数据不出现可见的变化。我使用红色,以便在屏幕截图中很明显,但一般情况下使用的最佳颜色是黑色。)


请注意,可以通过DataSort & FilterSort菜单、快捷键Alt+ A+S或从任何Alt当过滤模式 ( ++ ) 开启时,单元格内下拉菜单(当然,前提是有一个标题行,无论是否为空,否则不能保证排序正确进行A):T

工作表屏幕截图显示了如何从单元格下拉列表中访问自定义排序


本质上,按颜色排序在排序时添加了“分组”功能,类似于 SQL 中的功能。

这种分组可能相当复杂,包括使用多列作为条件,但仍然只需要两级排序。甚至可以执行“嵌套”分组 - 它们只需要额外的排序级别。

答案2

这是不隐藏行、不过滤、不辅助列、不条件格式的,-sort,我在 OP 的自我回答评论中提到了三步解决方案。已确认它在 Excel 2007 中有效。

步骤1

按以下排序方式BValues列排序Smallest to Largest

显示第一次排序的工作表屏幕截图

请注意,虽然显示了标题行,但这不是必需的。(有关详细信息,请参阅注释。)

第2步

选择表格顶部,直至列 中最后一行的非空白值B。对于示例表,该行应为A1:C5

对于大量行和/或列,执行此操作的最佳方法是(但同样适用于较小的表格,并避免手动滚动或使用鼠标)以下键盘快捷键序列,从列中的任何非空白单元格开始B

  • Ctrl+ Down
  • Ctrl+Right尽可能多次按下以到达表格的最右边一列(或者按住它以到达工作表的右边缘);
  • Ctrl+Left如果您超出范围并最终到达下一个表格的开头或表格的最右边的列);
  • Ctrl++ ;ShiftHome

如果表格右侧没有其他数据,则可以改用以下替代序列:

  • Ctrl+ Down
  • Ctrl++ ;ShiftUp
  • Shift+Space

步骤3

按以下排序方式AValues列排序A to Z

显示第二次排序的工作表屏幕截图


笔记:

  • 步骤 1 中的排序可以通过DataSort & FilterSort菜单项(或其快捷键Alt+ A+ S )执行,也可以在打开过滤模式后从单元格内下拉菜单中执行(当然,前提是有一个标题行)。
  • 排序是步骤 3 可以仅有的可以通过菜单项执行。
  • 即使表格数据从行开始1并且没有标题行,这种方法也能保证有效。仅有的我的两个解决方案(当然还有 OP 的解决方案)适用于这种情况。事实上,1如果列的第一个单元格B是空白,那么这些解决方案是唯一适用于无标题行表的解决方案,甚至可以使其适用于无标题行表的解决方案。
  • 无论过滤模式状态如何,它都可以正常工作。(当然,除非表格没有标题,从第一行开始,并且由于某种原因过滤模式被打开。在这种情况下,请将其关闭并保持关闭状态!)

答案3

似乎没有办法做我想做的事严格通过排序,但这对我有用:

  1. 按 B 列从小到大对行进行排序

  2. 隐藏 B 列中没有值的所有行

  3. 按 A 列的字母顺序对行进行排序

答案4

一个解决方案是将排序和过滤结合起来。如果第一行有列标题,效果会更好,但这不是必需的。

它不是如您所要求的“仅排序”,而是使用过滤器。但您可以“选择”整个表格(实际上打开过滤器模式即可完成此操作),然后按照步骤操作即可。此外,将其“转换”为宏也相当容易。与其他解决方案相比,此解决方案不需要您手动隐藏(或“取消选择”)不需要的行。您也不必引入额外的公式(通过对 A 列或 B 列进行条件格式化,或添加另一列)。

无论如何,情况如下:

打开过滤器:

  • 选择列表中的任意单元格并打开过滤模式(在功能区中,您可以在“数据”选项卡下找到它,它应该被称为“过滤器”)。您将看到您使用的每列的第一行中出现小三角形

    (注意:如果没有列标题,只需在最开始添加一个空行并手动选择所有使用的列,在本例中为 A 和 B,而不是“仅”选择列表中的单元格)

将没有 B 值的行移动到列表末尾:

  • 按升序对 B 列进行排序(通过单击 B 列第一行的小三角形按钮并选择按值升序排序)

对 A 列进行排序并关闭/删除过滤器

  • 筛选 B 列中有空单元格的行(再次单击三角形按钮并取消选中列表底部的值“空”)
  • 按升序对 A 列进行排序(与对 B 列进行排序的方式相同)
  • 关闭高级过滤(与打开它的方式相同),这将自动删除 B 列中空单元格的过滤器

据我了解,这应该会给你正确的结果。你也不必手动隐藏任何行,Excel 会为你隐藏所有行。

(请注意,手动隐藏行与使用过滤器“隐藏”行不同)

相关内容