【问题标题】:How to apply =ARRAYFORMULA() to a reversed numbered list in Google Sheets?如何将 =ARRAYFORMULA() 应用于 Google 表格中的反向编号列表?
【发布时间】:2022-08-04 16:59:18
【问题描述】:
No. Name Employment status
(insert formula here Sample Name Type of Employment
5 John Full-time
Mary Resigned
4 Jack Part-time
3 Tim Contract
Jane Dismissed
2 John Full-time
1 Larry Part-time

所以逻辑应该是公式会输出一个否。在第 1 列中的倒序编号列表格式中,对于那些在第 3 列中“解雇”或“辞职”的人,公式将跳过它们,下一个编号将是前一个编号的后续。反而。

标签: google-sheets array-formulas numbered-list


【解决方案1】:

试试COUNTIF() 喜欢-

=Arrayformula(IF(C2:C<>"Current",,COUNTIFS(C2:C, C2:C, ROW(C2:C), ">="&ROW(C2:C))))

编辑:在 OP 发表评论和更新数据后,请尝试以下公式-

=Arrayformula(IF(C2:C="",,IF(RegexMatch(C2:C,"Resigned|Dismissed"),,COUNTIFS(C2:C,"*",ROW(C2:C), ">="&ROW(C2:C))-(COUNTIFS(C2:C,"Resigned",ROW(C2:C), ">="&ROW(C2:C))+COUNTIFS(C2:C,"Dismissed",ROW(C2:C), ">="&ROW(C2:C))))))

【讨论】:

  • 嗨哈伦24小时!如果“当前”切换到多个标签,我可以知道如何使用这个公式吗?例如。 “全职”、“兼职”、“合同”?
  • 根据数据,我们必须添加更多条件。根据您的示例数据,这是发布的。
  • 嗨哈伦24小时!我已经修改了我的初始样本数据。
  • 你有更多的关键字或当前的关键字是固定的吗?
  • 嗨哈伦24小时!任何不涉及正则表达式的解决方法?我们正在使用类似于 Google 表格但不完全一样的内部解决方案。因此不支持自定义函数和 =regex()。
【解决方案2】:

给你的公式

=ArrayFormula(IF(C2:C="Current",INDEX(SORT({COUNTIFS(INDEX(SORT({C2:C,ROW(C2:C)},2,0),0,1),"Current",ROW(C2:C),"<="&ROW(C2:C)),ROW(C2:C)},1,0),0,1),""))


编辑:包括多个标签

=ArrayFormula(IF((C2:C="Full-time")+(C2:C="Part-time")+(C2:C="Contract"),COUNTIFS((C2:C="Full-time")+(C2:C="Part-time")+(C2:C="Contract"),1,ROW(C2:C),">="&ROW(C2:C)),))

或者

=ArrayFormula(IF((C2:C="Full-time")+(C2:C="Part-time")+(C2:C="Contract"),COUNTIFS((C2:C="Full-time")+(C2:C="Part-time")+(C2:C="Contract"),">0",ROW(C2:C),">="&ROW(C2:C)),))

或者

=ArrayFormula(IF(ISNUMBER(MATCH(C2:C,{"Full-time","Part-time","Contract"},0)),COUNTIFS(MATCH(C2:C,{"Full-time","Part-time","Contract"},0),">0",ROW(C2:C),">="&ROW(C2:C)),))

或者

=ArrayFormula(IF(ISNUMBER(SEARCH(C2:C,"Full-time"&"Part-time"&"Contract"))*(C2:C<>""),COUNTIFS(SEARCH(C2:C,"Full-time"&"Part-time"&"Contract")*(C2:C<>""),">0",ROW(C2:C),">="&ROW(C2:C)),))

函数引用

【讨论】:

  • 嗨@Theza!我已更新问题以包含多个标签以应用编号例外。请您帮忙看看您当前的公式是否能够适应此更新?提前致谢!
  • @qazamy 我更新了我的答案更多..希望它有效
【解决方案3】:

替代方案:使用自定义函数

您还可以使用 Google Apps 脚本创建自定义函数,如下所示:

function customFunction(range) {
  var out = [];
  var count = 0;
  for (i = 0; i <= range.length-1; i++) {
    (range[i][1] != "Resigned" && range[i][1] != "Dismissed") ? count++ : count;
  }
  for (i = 0; i <= range.length-1; i++) {
    if ((range[i][1] != "Resigned") && (range[i][1] != "Dismissed")) {
      out.push([count]);
      count--;
    } else {
      out.push([""]);
    }
  }
  return out;
}

用法

您可以将 customFunction 名称重命名为您想要的任何名称。要使用 customFunction,您只需要输入以下语法:

=customFunction(B3:C9)

【讨论】:

  • 嗨帕特里克!不幸的是,我们使用的内部解决方案类似于 Google 表格,但不完全一样。所以不支持自定义函数。
  • 你好@qazamy!我的错。我确实假设您正在使用基于标签的 Google 表格。在使用 Google Apps 脚本解决问题时,我只是提出了一种替代方案,因为在需要调整时(在我看来)它更容易修改。
【解决方案4】:

=ARRAYFORMULA(IF(MMULT(N(C2:C8={"Resigned","Dismissed"}),{1;1}),"",MMULT(N(ROW(C2:C8)&lt;=TRANSPOSE(ROW(C2:C8))),1-ISNUMBER(MATCH(C2:C8,{"Resigned","Dismissed"},0)))))

  • @Jos Woolley 在此thread 中回答

【讨论】:

    猜你喜欢
    • 2022-08-04
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    • 2022-11-24
    • 1970-01-01
    • 2021-02-27
    相关资源
    最近更新 更多