【问题标题】:How do I sum values if both column, row and cell value match conditions?如果列、行和单元格值都匹配条件,我如何对值求和?
【发布时间】:2020-03-11 23:09:54
【问题描述】:

我有两张表:飞行控制和总小时数控制。 Link to sheets.

飞行控制:

总小时数:

我想要什么:在总小时数,如果满足以下条件,则求和飞行时间

列名(L.D.1) 匹配上的行; Pilot 行匹配 Pilot 行; cell 的值为 1。

我将它用于单元格 C2,它有效:

=SUMIFS('Flight Time'!B:B;'Flight Time'!A:A;B2;'Flight Time'!C:C;"1")

它有效,给了我这个:

但是,这不是很实用。每次引入新飞行员时,我都必须重做公式。如果我移动列,它就会停止工作。

我需要什么:将我的条件基于文本搜索。比如:

If column name in  {Flight Time!C:F} matches string on {row in col Line}, and Pilot = Pilot, and cell value = 1, SUM

换句话说,我需要扩展它。最终产品将有数十名飞行员和 L.D.s,所以我需要能够移动东西。

【问题讨论】:

  • 分享您的工作表副本
  • 你有没有考虑使用apps脚本来做呢?见:developers.google.com/apps-script/reference/spreadsheet
  • 我考虑过,但由于我的 JS 技能非常基础,我想我会尝试一下这个问题。我在 Python+Pandas 中迭代列 + 行名称,但这似乎采用了不同的逻辑(它也必须单独在 gsheets 上工作,所以我把 python 放在一边。用户@player0 已经把它弄好了,我在努力让他的代码工作,你认为这是正确的道路,然后再前往 Google Scripts?老实说,我仍在试图弄清楚他的代码的来龙去脉。

标签: arrays google-sheets sum array-formulas google-sheets-query


【解决方案1】:

我的回答与 player0 的类似,但它预计飞行时间选项卡会横向和向下无限扩展。

您将启动一个新选项卡并将此公式放在单元格 A1 中。

=ARRAYFORMULA(QUERY(SPLIT(TRANSPOSE(TRIM(SPLIT(QUERY(TRANSPOSE(QUERY('Flight Time'!C1:1&"|"&'Flight Time'!A2:A&"|"&OFFSET('Flight Time'!C2;;;ROWS('Flight Time'!C2:C);COLUMNS('Flight Time'!C2:2))*'Flight Time'!B2:B&CHAR(10);;9^99));;9^99);CHAR(10);0;0)));"|";0;0);"select Col1,Col2, SUM(Col3) where Col3>0 group by Col1,Col2 label Col1'Line',Col2'Pilot',SUM(Col3)'Total Hours'"))

有时在这样的复杂公式中,如果您没有将示例数据放置在与实际工作表上完全相同的布局中,则可能难以将其转换为实际工作表。如果是这种情况,请更改示例的布局,使其更好地匹配您的真实数据,我可以尝试更新公式。

【讨论】:

    【解决方案2】:

    使用:

    =ARRAYFORMULA(SPLIT(
     TRANSPOSE(QUERY(TRANSPOSE(QUERY(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(
     IF(C2:F="",,"♠"&C1:F1&"♦"&A2:A&"♣♥"&B2:B),,999^99)),,999^99), "♠")), "♥"), 
     "select Col1,sum(Col2) group by Col1 label sum(Col2)''")),,999^99)), "♦♣"))
    

    【讨论】:

    • 感谢您提供的遮阳篷。老实说,我仍在试图弄清楚这段代码,我猜我应该用我的列名和飞行员填充扑克牌图标?还没有完全开始工作。
    • 如果 C2:F 范围不为空,则它将第 1 行标题与 A 列和 B 列集中在一起。然后它将所有结果折叠到一个单元格中,Split 的组合会将其分成两列.然后查询执行持续时间的总和,结果再次折叠成一列,拆分公式将其切割成最后 3 列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多