【问题标题】:How to sort in google sheets incrementally如何在谷歌表格中逐步排序
【发布时间】:2017-08-29 19:09:25
【问题描述】:

背景

我正在制作一个电子表格,用于规划婚礼的参加者。将有男女分开的大厅,我们正在讨论应该邀请哪些年龄组。现在我的工作表中有一个标签,名为age range,它有以下年龄范围:

  • 0 - 3
  • 4 - 12
  • 12 - 18
  • 18+

我有一个标签,其中包含不同的家庭,以及他们的性别、年龄范围等,如下所示:

这是摘要表:

问题

制作此电子表格的目的是为了能够快速做出决定,例如:我们是否要邀请 x/y/z 家庭中的所有人以及 12 岁以上的所有人等?

我想在电子表格中做的是,如果我选择年龄组的下拉菜单并选择 4-12 岁,那么我希望 4-12 岁年龄组中的每个人(以及年龄较大的人) 被选中.. 现在如果我选择 4-12,那么只有 4-12 岁的人会被列出..

想法?

(注意:请记住,我希望年龄组相同或更大.. 相反.. 即如果选择了 18 岁以上的年龄组,我不希望包括 18 岁以下的任何人)

更新

这是spreadsheet的可编辑副本

更新 2(我尝试过的)

我能够为单个值执行此操作:即告诉我属于 heba_immediate_family 表中特定单元格的人是否属于等于或大于您选择的年龄范围组,通过运行这个:

=match(vlookup(C23, 'age range'!$A1:$B4, 2), {vlookup(heba_immediate_family!D2,'age range'!$A1:$B4,2)},1)

但是我不知道如何扩展它以包含整个表格,即这个公式:

=ARRAYFORMULA(match(vlookup(C24, 'age range'!$A1:$B4, 2),vlookup(heba_immediate_family!D2:D19,'age range'!$A1:$B4,2),1)) 返回此错误

在 MATCH 评估中未找到值“0”。

想法?

【问题讨论】:

    标签: google-sheets spreadsheet google-sheets-api


    【解决方案1】:

    在您的第二次更新中使用MATCH 确实是可行的方法,将其添加到您开始使用的COUNTIFS 中。 (已针对范围的第一行进行了更正。)

    =COUNTIFS(heba_immediate_family!C2:C, B11, heba_immediate_family!D2:D, C11)
    

    正如屏幕截图所示,COUNTIFS 中的第一个条件是可以的,所以我们将从重建第二个条件开始。更具体地说,范围匹配的内容,在示例中显示为 C11。因为您需要创建累积选择而不是单个选择,所以我们需要使用不等式运算符将单元格范围与年龄范围进行比较。在没有给出任何内容的情况下,COUNTIFS 隐式默认为 = 进行比较。我们需要将其更改为使用 >=大于或等于 的显式比较,以便它匹配所选范围内或更大范围内的任何内容。这产生:

    =COUNTIFS(heba_immediate_family!C2:C, B11, heba_immediate_family!D2:D, ">="&C11)
    

    下一个问题是您的情况是在我们认为的数字范围内使用真正的文本字符串。为了解决这个问题,我们需要使用MATCH 函数。 MATCH 返回匹配项在范围内相对于范围开始的位置。您已经使用age range 表为此做好了准备,我们可以使用它。但是我们不需要第二列,因为我们将使用MATCH 函数而不是VLOOKUP 函数。但是,我们将从MATCH 获得的数字与第二列中列出的数字相同,因此它确实可以作为一个方便的参考。为了完成这项工作,我们需要在比较的两侧使用MATCH,以便我们获得相同的参考点。 MATCH 函数通常在一个单元格上工作,因此我们还需要 ARRAYFORMULA 函数在数组意义上应用第一个 MATCH。最后一点是MATCH 函数默认假设给定范围按升序排序。由于年龄范围实际上是文本,因此它们不是。我们需要将可选的第三个参数设置为 0 来通知函数,这现在给了我们:

    =COUNTIFS(heba_immediate_family!C2:C, B11, ARRAYFORMULA(MATCH(heba_immediate_family!D2:D, 'age range'!A1:A, 0)), ">="&MATCH(C11, 'age range'!A1:A, 0))
    

    如果您想在摘要表上的每个单元格中输入此内容,我们就完成了。如果您希望能够通过拖动来复制它,那么我们需要使用绝对符号 $ 锁定一些范围引用。这会给我们:

    =COUNTIFS(heba_immediate_family!C$2:C, B11, ARRAYFORMULA(MATCH(heba_immediate_family!D$2:D, 'age range'!A$1:A, 0)), ">="&MATCH(C11, 'age range'!A$1:A, 0))
    

    为了使这一切更易于使用,我们可以做的另一件事是将公式中的工作表名称链接到第一列中的名称。此步骤将需要更改工作表的命名方式,或在摘要页面的第一列中命名族的方式,以使它们相同。在摘要表的第一列中有heba immediate family,它引用了名为heba_immediate_family 的表。由于输入下划线不如输入空格自然,我建议重命名工作表以删除下划线,但任何使两者匹配的方式都可以。完成后,下一部分是使用INDIRECT 函数将文本转换为工作表引用。实际上,由于它的工作方式,我们确实需要将其转换为范围引用,使用单元格中的文本作为其中的一部分。我们要这样做的方法是将单元格中的文本与范围的固定文本连接起来,例如年龄范围列INDIRECT(A3&"!D$2:D")。对两个范围都这样做,并将其移动到摘要表的 data 第一行,在单元格 D3 中给出最终版本,可以根据需要在工作表中复制为所有家庭。完成的公式为:

    =COUNTIFS(INDIRECT(A3&"!C$2:C"), B3, ARRAYFORMULA(MATCH(INDIRECT(A3&"!D$2:D"), 'age range'!A$1:A, 0)), ">="&MATCH(C3, 'age range'!A$1:A, 0))
    

    作为进一步的选择,您可以将gender 列完​​全从工作表中删除。根据定义,上半部分的所有内容都是“M”,下半部分是“F”。因此,删除列 B 会将年龄范围移动到列 B 中,并将公式移动到列 C 中。这样做,并将性别硬编码到公式中会得到两个公式。

    对于男性,从单元格 C3 开始:

    =COUNTIFS(INDIRECT(A3&"!C$2:C"), "M", ARRAYFORMULA(MATCH(INDIRECT(A3&"!D$2:D"), 'age range'!A$1:A, 0)), ">="&MATCH(C3, 'age range'!A$1:A, 0))
    

    对于女性,从单元格 C11 开始:

    =COUNTIFS(INDIRECT(A11&"!C$2:C"), "F", ARRAYFORMULA(MATCH(INDIRECT(A11&"!D$2:D"), 'age range'!A$1:A, 0)), ">="&MATCH(C11, 'age range'!A$1:A, 0))
    

    而且,由于我看到了一个可能改进使用的最终选项,所以我会提出一个最终改进,并理解。如果打算从 所有 个家庭中邀请相同的年龄范围,而不是从 每个 个家庭中邀请不同的年龄范围,则无需在每一行上选择年龄组的摘要表。相反,将其设置为工作表顶部的单个单元格并将所有公式链接到它。另一方面,如果您正在考虑选择来自不同家庭的不同年龄范围,那么这种改变不是您想要做的。

    为此,结合最后一个关于性别的选项,再次删除age group 的列B,将公式和总计移动到列B。在单元格 D1 中键入“年龄组:”,并在单元格 E1 中创建年龄范围下拉菜单。然后把这两个公式改成这些。

    对于男性,从单元格 B3 开始:

    =COUNTIFS(INDIRECT(A3&"!C$2:C), "M", ARRAYFORMULA(MATCH(INDIRECT(A3&"!D$2:D"), 'age range'!A$1:A, 0)), ">="&MATCH($E$1, 'age range'!A$1:A, 0))
    

    对于女性,从单元格 B11 开始:

    =COUNTIFS(INDIRECT(A11&"!C$2:C), "F", ARRAYFORMULA(MATCH(INDIRECT(A11&"!D$2:D"), 'age range'!A$1:A, 0)), ">="&MATCH($E$1, 'age range'!A$1:A, 0))
    

    【讨论】:

      【解决方案2】:

      @abbood:处理此问题的最简单方法是为您拥有的每个人口统计桶(即 4-12)创建一个索引。为每个人分配一个最大值(即 4-12 将是 12,因为服务员的最大年龄是 12)。假设没有间隙,那么您可以使用此索引值进行过滤。您可以使用 INDEX(MATCH()) 或 VLOOKUP() 将索引表与 QUERY() 或 SUMIF() 一起使用来聚合或过滤表。

      【讨论】:

      • 我无法将公式组合在一起。我正在尝试这样的事情:=filter(heba_immediate_family!A1:A19, Vlookup(C11,'age range'!$A$1:$B$4,2)>Vlookup(heba_immediate_family!D2,'age range'!$A$1:$B$4,2),heba_immediate_family!C1:C19=B11),但它返回错误:FILTER has mismatched range sizes. Expected row count: 19, column count: 1. Actual row count: 1, column count: 1.
      • 因此 FILTER() 函数在您尝试使用它时不会以这种方式工作,但一个快速解决方法是添加一个将年龄范围组转换为其最大年龄的列。这样您就可以正确使用 FILTER() 函数。例如,如果转换后的列是 B,则公式为: =filter(heba_immediate_family!A1:A19, heba_immediate_family!B1:B19>=Vlookup(heba_immediate_family!D2,'age range'!$A$1:$B$4,2 ,假))
      猜你喜欢
      • 2022-10-14
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      相关资源
      最近更新 更多