如何对只包含非空单元格的行进行排序?

13

我有一个谷歌电子表格,里面有两个单独的工作表。第一个工作表只是一个包含姓名和数据的大列表,而第二个工作表应该是按照第一个工作表上所有数据的排序列表(例如按姓氏排序)。以下是我目前定义第二个工作表的方式:

=sort(sheet1!A2:L100, sheet1!D2:D100, TRUE)

这在大多数情况下都可以正常工作,除了一个问题:在sheet1中,第四列(D列)的一些单元格为空白的。如何更改公式以使排序忽略具有空白单元格的行?

我尝试过的公式但结果不理想:

  1. =arrayformula(if(istext(sheet1!D2:D100), sort(sheet1!A2:L100, sheet1!D2:D100, true), ""))

    它按预期进行了排序但出现了一个问题 - 空白单元格没有被推到末尾而是散布在行之间。

  2. =arrayformula(sort(filter(sheet1!A2:L100, istext(sheet1!D2:D100)),sheet1!D2:D100, true))

    虽然筛选部分完美地完成了其工作,但与排序结合使用时,它会出现错误:范围长度不匹配。


由于我急需答案,我也在Google Docs论坛上发布了这个查询。希望这不会违反任何规定。 - viv227295
2个回答

19

要过滤掉D列中空单元格的行,可以像#2一样做,但是正如错误消息所提示的那样,第二个参数也需要进行过滤以确保范围长度相同。幸运的是,有一种更简单的方法,那就是使用列索引而不是范围:

=SORT(FILTER(sheet1!A2:L100;ISTEXT(sheet1!D2:D100));4;TRUE)

另外,您还可以使用QUERY函数来执行此类操作:

=QUERY(sheet1!A2:L100;"select * where D != '' order by D";0)


非常感谢AdamL,很高兴在这里见到你 :) - viv227295
1
=SORT(FILTER(sheet1!A2:L100;ISTEXT(sheet1!D2:D100));4;TRUE) doesn't work, but =QUERY(sheet1!A2:L100;"select * where D != '' order by D";0) works. But I needed to replace ; with ' - thepunitsingh

15

对于任何需要此功能的人,如果要筛选真正为空的空单元格,则已接受的答案非常有效,但是如果单元格包含公式并计算结果为空(""),ISTEXT将评估为TRUE,并且空白将不会被过滤掉。我稍微修改了已接受的答案,以适应我的情况,在这种情况下,我有一些包含公式(计算结果为空字符串)的单元格需要被过滤掉:

=SORT(FILTER(sheet1!A2:L100,sheet1!D2:D100 <> ""),4,TRUE)

不支持无限范围。例如=SORT(FILTER($B$2:$B, $B$2:$B <> ""),1,TRUE),这里的初始单元格是B2,并覆盖整个B列。 - thepunitsingh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接