我有一张表,其中列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=""
请注意,虽然显示了标题行,但这不是必需的。(请参阅我的其他答案了解更多详情。
现在,要获得所需的结果,您需要执行以下两级排序:
B
按列Font Color
排序Automatic
On Top
A
按列Values
排序A to Z
通过在条件格式规则中使用填充颜色而不是字体颜色并进行排序,可以实现相同的效果Cell Color
。(通过使用字体颜色,可以更简单地使数据不出现可见的变化。我使用红色,以便在屏幕截图中很明显,但一般情况下使用的最佳颜色是黑色。)
请注意,可以通过Data
→ Sort & Filter
→Sort
菜单、快捷键Alt+ A+S或从任何Alt当过滤模式 ( ++ ) 开启时,单元格内下拉菜单(当然,前提是有一个标题行,无论是否为空,否则不能保证排序正确进行A):T
本质上,按颜色排序在排序时添加了“分组”功能,类似于 SQL 中的功能。
这种分组可能相当复杂,包括使用多列作为条件,但仍然只需要两级排序。甚至可以执行“嵌套”分组 - 它们只需要额外的排序级别。
答案2
这是不隐藏行、不过滤、不辅助列、不条件格式的,二-sort,我在 OP 的自我回答评论中提到了三步解决方案。已确认它在 Excel 2007 中有效。
步骤1
按以下排序方式B
按Values
列排序Smallest to Largest
:
请注意,虽然显示了标题行,但这不是必需的。(有关详细信息,请参阅注释。)
第2步
选择表格顶部,直至列 中最后一行的非空白值B
。对于示例表,该行应为A1:C5
。
对于大量行和/或列,执行此操作的最佳方法是(但同样适用于较小的表格,并避免手动滚动或使用鼠标)以下键盘快捷键序列,从列中的任何非空白单元格开始B
:
- Ctrl+ Down;
- Ctrl+Right尽可能多次按下以到达表格的最右边一列(或者按住它以到达工作表的右边缘);
- (Ctrl+Left如果您超出范围并最终到达下一个表格的开头或表格的最右边的列);
- Ctrl++ ;ShiftHome
如果表格右侧没有其他数据,则可以改用以下替代序列:
- Ctrl+ Down;
- Ctrl++ ;ShiftUp
- Shift+Space
步骤3
按以下排序方式A
按Values
列排序A to Z
:
笔记:
- 步骤 1 中的排序可以通过
Data
→Sort & Filter
→Sort
菜单项(或其快捷键Alt+ A+ S )执行,也可以在打开过滤模式后从单元格内下拉菜单中执行(当然,前提是有一个标题行)。 - 排序是步骤 3 可以仅有的可以通过菜单项执行。
- 即使表格数据从行开始
1
并且没有标题行,这种方法也能保证有效。仅有的我的两个解决方案(当然还有 OP 的解决方案)适用于这种情况。事实上,1
如果列的第一个单元格B
是空白,那么这些解决方案是唯一适用于无标题行表的解决方案,甚至可以使其适用于无标题行表的解决方案。 - 无论过滤模式状态如何,它都可以正常工作。(当然,除非表格没有标题,从第一行开始,并且由于某种原因过滤模式被打开。在这种情况下,请将其关闭并保持关闭状态!)
答案3
似乎没有办法做我想做的事严格通过排序,但这对我有用:
按 B 列从小到大对行进行排序
隐藏 B 列中没有值的所有行
按 A 列的字母顺序对行进行排序
答案4
一个解决方案是将排序和过滤结合起来。如果第一行有列标题,效果会更好,但这不是必需的。
它不是如您所要求的“仅排序”,而是使用过滤器。但您可以“选择”整个表格(实际上打开过滤器模式即可完成此操作),然后按照步骤操作即可。此外,将其“转换”为宏也相当容易。与其他解决方案相比,此解决方案不需要您手动隐藏(或“取消选择”)不需要的行。您也不必引入额外的公式(通过对 A 列或 B 列进行条件格式化,或添加另一列)。
无论如何,情况如下:
打开过滤器:
选择列表中的任意单元格并打开过滤模式(在功能区中,您可以在“数据”选项卡下找到它,它应该被称为“过滤器”)。您将看到您使用的每列的第一行中出现小三角形
(注意:如果没有列标题,只需在最开始添加一个空行并手动选择所有使用的列,在本例中为 A 和 B,而不是“仅”选择列表中的单元格)
将没有 B 值的行移动到列表末尾:
- 按升序对 B 列进行排序(通过单击 B 列第一行的小三角形按钮并选择按值升序排序)
对 A 列进行排序并关闭/删除过滤器
- 筛选 B 列中有空单元格的行(再次单击三角形按钮并取消选中列表底部的值“空”)
- 按升序对 A 列进行排序(与对 B 列进行排序的方式相同)
- 关闭高级过滤(与打开它的方式相同),这将自动删除 B 列中空单元格的过滤器
据我了解,这应该会给你正确的结果。你也不必手动隐藏任何行,Excel 会为你隐藏所有行。
(请注意,手动隐藏行与使用过滤器“隐藏”行不同)