如何逐步在Google工作表中进行排序

时间:2017-08-29 19:09:26

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

背景

我正在制作一份电子表格,计划与会者参加婚礼。将有男女分开的大厅,我们正在讨论应邀请哪些年龄组。现在,我的表格中有一个标签client_config_backend: settings client_config: client_id: 9637341109347.apps.googleusercontent.com client_secret: psDskOoWr1P602PXRTHi save_credentials: True save_credentials_backend: file save_credentials_file: credentials.json get_refresh_token: True ,它有以下年龄范围:

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

我有一个标签,它有不同的家庭,以及他们的性别,年龄范围等,如下所示: enter image description here

这是摘要表:

enter image description here

问题

执行此电子表格的目的是能够快速做出以下决定:我们是否希望邀请x / y / z家庭的每个人与12岁以上的人一起等?

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

想法?

(注意:请记住,我希望年龄组相同或更老.. 不是反过来..即如果年龄组18岁以上被选中,我不会&#39 ;想要包括18岁以下的人)

enter image description here

更新

这是spreadsheet

的可编辑副本

更新2(我尝试过的)

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

heba_immediate_family

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

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

  

没找到价值' 0'在MATCH评估中。

想法?

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

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