Libreoffice Calc从结果子集中查找MAX

时间:2017-11-06 12:07:13

标签: indexing max formula libreoffice-calc

我有一个用于跟踪书写的Libreoffice Calc工作簿,其中有3张。 '时间跟踪','时间摘要'和'年度统计'。 “时间跟踪”是输入用户数据的位置,“时间摘要”是“时间跟踪”的数据透视表;和“年度统计”显示了长期进展。

时间摘要(运行一些测试数据)看起来有点像这样:

       |Column A (Weeks)       | ... |Column M (Total Words)
-------+-----------------------+-----+----------------------
Row 7  |02/10/17 - 08/10/17    |     |3500
Row 8  |13/11/17 - 19/11/17    |     |2300
Row 9  |30/04/18 - 06/05/18    |     |1000
Row 10 |30/10/17 - 05/11/17    |     |700

每年的统计数据如下:

       |A                   |B       |C
-------+--------------------+--------+----
Row 1  |                    |2017    |2018
Row 2  |Total Words         |6500    |1000
...
Row 7  |Max Words (Week)    |3500    |3500

“年度统计数据”的公式.B7:C7目前为=MAX($'Time Summary'.$M$7:$M$10),但我需要对其进行修改以按列标题上的年份进行过滤。
https://ask.libreoffice.org/en/question/62260/minif-and-maxif-function-in-calc/看起来很有用,但是当我尝试它时,公式中的MAX返回ROW的MAX - 为10 - 而不是ROW返回MAX值的位置 - 即使它似乎在来自链接的示例文件。

示例公式为:

=IFERROR(INDEX($Sheet1.$J$2:$J$13,MAX(ROW($Sheet1.$J$2:$J$13)*($Sheet1.$A$2:$A$13=A2))-1,1),NA())

我的公式使用RIGHT()将列标题的最后两个字符与$'Time Summary':$A$7:$A$10中每周最后两个字符进行比较,并且是:

=IFERROR(INDEX($'Time Summary'.$M$7:$M$10,MAX(ROW('Time Summary'.$M$7:$M$10)*(RIGHT($'Time Summary'.$A7:$A$10,2)=RIGHT(B1,2)))-6,1),NA())

我当然记得按照说明的说法按CTRL + SHIFT + ENTER,以使公式中的数组生效。

这就是我的问题的解释。我错了什么?

1 个答案:

答案 0 :(得分:0)

好的,这有点啰嗦,但我已设法通过使用以下公式解决问题:

=IF(MAX(IF(RIGHT(INDIRECT(CONCATENATE("$'Time Summary'.$A7:$A$",COUNTIF($'Time Summary'.$A:$A,"<>''")+2)),2)=RIGHT(B1,2),INDIRECT(CONCATENATE("$'Time Summary'.$Q$",ROW(INDIRECT(CONCATENATE("$'Time Summary'.$Q7:$Q$",COUNTIF($'Time Summary'.$Q:$Q,"<>''")+5))))),0))>0,MAX(IF(RIGHT(INDIRECT(CONCATENATE("$'Time Summary'.$A$7:$A$",COUNTIF($'Time Summary'.$A:$A,"<>''")+2)),2)=RIGHT(B1,2),INDIRECT(CONCATENATE("'Time Summary'.$Q",ROW(INDIRECT(CONCATENATE("$'Time Summary'.$Q$7:$Q$",COUNTIF($'Time Summary'.$Q:$Q,"<>''")+5))))),0)),NA())

它包含在IF中,用'#NA'替换任何0结果(仅用于输出的整洁性)。 另外,指定范围的右半部分使用计算来计算底行的位置,省略总数,这是另一个原因,它是如此巨大。