2017-05-14 120 views
0

我有一个包含两列数据的Google表格。 A单调递增,具有许多重复项(基于粗时间戳),而B实质上是随机的。底部有许多空行等待未来的数据。它类似于以下内容:排除Google表格中的汇总计算范围中的最后一个值

 A B 
1 5 43 
2 5 77 
3 13 8 
4 21 34 
5 27 68 
6 27 90 
7 
8 
9 
10 

我试图写一个检查所有的(非空)值的列除了最后一个几个公式。例如,我想找到排除最新值的B的最大值,所以结果应该是77B2而不是90B6

如果该范围内的值进行了严格的增加和独特的,我可以的A值过滤成C,不包括任何值等于最大值(只有最后一个条目),然后采取一系列的MAX(..)。但是,我的数据没有这个属性;最终的价值可能会被重复,并且重复将被不恰当地忽略。

 C        D   E 
1 =FILTER(A:A, A:A < MAX(A:A)) =MAX(C:C) This produces A4's 21 instead of A5's 27. 

,如果我们有递增指数使用的第三列类似的方法将工作:

 A B C D        E 
1 5 43 9 =MAX(FILTER(C:C, A:A <> "")) Value of index in last populated row. 
2 5 77 10 =MAX(FILTER(A:A, C:C < D1)) Maximum value from a row with lower index. 
3 13 8 11 
4 21 34 12 
5 27 68 13 
6 27 90 14 
7   15 
8   16 
9   17 
10   18 

但是我正在寻找一种不需要修改原来的电子表格中的解决方案,因为这并不总是可能的。我不能只创建一个新的IndexSheet与只不过是一个索引列,并参与进来,这样,而不是...

 A B C 
1 5 43 =MAX(FILTER(IndexSheet!A:A, A:A <> "")) 
2 5 77 =MAX(FILTER(A:A, IndexSheet!A:A < C1)) 
... 

...因为这要求IndexSheet有相同数量的行为的数据表,并会随着更多数据的添加而中断。

在不修改原始数据表或依赖数据属性(超出值为数字和行为空或满)的情况下,是否有任何方法在排除最后一个值的情况下对范围执行聚合计算?

回答

1

您可以使用indirectaddress公式来创建排除最后一排

=max(indirect("A1:"&Address(count(A:A)-1,1))) 

count功能使用户可以减去1,以排除最后一行在列A.非空单元格的数量的动态范围。

你用这个数字来构建使用"A1:"&address(row no, Col no)它在你的榜样情况下应该是A1:$A$5

使用此字符串采用间接法indirect(A1:$A$5)引用您的细胞和引用传递到max函数来确定地址在该范围内最大。

1

从另一个片的尝试:

=MAX(Sheet1!B1:indirect("Sheet1!B"&count(Sheet1!B:B)-1)) 
0

我们可以用FILTER()ROW()功能来实现这一点:

D 
1 =MAX(FILTER(Data!A:A, 
       ROW(Data!A:A) < MAX(FILTER(ROW(Data!A:A), 
              Data!A:A <> "")))) 

我们使用FILTER(ROW(DATA!A:A), Data!A:A <> ""))获得非空行的行号的数组,并使用MAX(...)取最后一个行号。我们用这个来排除最后一行,通过从FILTER(Data!A:A, ROW(Data!A:A) < ...)过滤掉较低的行号中的值。我们将MAX(...)应用于此过滤数组,并获得我们正在查找的结果。

相关问题