11

我有一个带有两个单独工作表的 Google 电子表格。第一个只是名称和数据的大列表,第二个应该是第一张表上所有数据的排序列表(按姓氏排序)。这是我定义第二张纸的当前方式:

=排序(sheet1!A2:L100,sheet1!D2:D100,真)

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

我尝试过但得到了不良结果的公式:

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

    它按需要排序,但有一个问题 - 空白单元格没有被推到最后,而是分散在行之间。

  2. =arrayformula(排序(过滤器(sheet1!A2:L100, istext(sheet1!D2:D100)),sheet1!D2:D100, true))

    尽管过滤器部分完美地完成了它的工作,但是当与排序结合使用时,它会给出一个错误:不匹配的范围长度。

4

2 回答 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)

于 2013-08-06T00:36:07.733 回答
13

对于任何人来说,如果过滤掉真正空白的空白单元格,则接受的答案非常有效,但如果单元格包含评估为空白 ("") 的公式,则 ISTEXT 将评估为 TRUE,并且不会过滤掉空白。我稍微修改了接受的答案以适应我的情况,其中我有包含我想过滤掉的公式(评估为“”)的单元格:

=SORT(FILTER(sheet1!A2:L100,sheet1!D2:D100 <> ""),4,TRUE)
于 2017-09-10T03:55:45.890 回答