我有一个用于跟踪书写的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,以使公式中的数组生效。
这就是我的问题的解释。我错了什么?
答案 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结果(仅用于输出的整洁性)。
另外,指定范围的右半部分使用计算来计算底行的位置,省略总数,这是另一个原因,它是如此巨大。