Google sheets 求最小值的最大值

Google sheets 求最小值的最大值,google-sheets,max,aggregate,min,array-formulas,Google Sheets,Max,Aggregate,Min,Array Formulas,我想计算电子表格(特别是Google Sheets)中每行最小值的最大值,该值大于0。我希望这是有道理的。我的数据是: 0 6 7 8 1 0 12 21 22 21 0 10 18 24 0 7 9 1 17 0 16 16 20 因此,我需要某种形式的数组公式,它将生成: 1 12 10 1 16 然后我可以得到最大值。我已经阅读

我想计算电子表格(特别是Google Sheets)中每行最小值的最大值,该值大于0。我希望这是有道理的。我的数据是:

0    6   7   8   1          
0   12  21  22  21          
0   10      18  24
0    7   9   1  17          
0   16  16  20              
因此,我需要某种形式的数组公式,它将生成:

 1
12
10
 1
16
然后我可以得到最大值。我已经阅读并体验到显而易见的解决方案不起作用,即:

=max(ArrayFormula(min(if(A:Z>0,A:Z,"")))

原因是
数组公式(最小值(…<代码>部分返回最小大于0的数据集,这里是1。如果没有好的解决方案,我会考虑重新安排我的数据,或者在单独的单元格中计算最小值,但我真的希望得到一步解决方案。

< P>用A1:E5范围内的数据,在F1中,并复制下来:

=if(small(A1:E1,1)=0,small(A1:E1,2),small(A1:E1,1))  

应返回每行大于0的最小值,可使用以下公式计算最大值:

=max(F1:F5) 

数据在A1:E5范围内,在F1中并向下复制:

=if(small(A1:E1,1)=0,small(A1:E1,2),small(A1:E1,1))  

应返回每行大于0的最小值,可使用以下公式计算最大值:

=max(F1:F5) 

max ArrayFunction不存在,因此唯一的方法是解决问题。假设您的一些数字的范围为
A1:C5
。结果范围为
D1:D5

您所需要的只是单元格
D1
中的单个公式:

=QUERY(QUERY({ArrayFormula(REGEXEXTRACT(TRANSPOSE(SPLIT(ArrayFormula(CONCATENATE(row(A1:C5)&"*"&A1:C5&"/")),"/")),"\d+")),ArrayFormula(REGEXEXTRACT(TRANSPOSE(SPLIT(ArrayFormula(CONCATENATE(row(A1:C5)&"*"&A1:C5&"/")),"/")),"[*](\d+)")*1)},"select Col1, min(Col2) where Col2 <>0 group by Col1 label min(Col2) ''"),"select Col2")
=QUERY(查询({ArrayFormula(REGEXEXTRACT)(转置)(拆分(ArrayFormula)(CONCATENATE)(行(A1:C5)和“*”&A1:C5&“/”)),“/”),“/”),“\d+”),ArrayFormula(REGEXEXTRACT)(转置(拆分(ArrayFormula)(行(A1:C5)和“*”&A1:C5&“/”),“/”),“/”),“/”,“/”,“[*”,”,“*”,”,“*”,”,”,“*”,”,”,“(\d+)*1),“选择Col1,最小(Col2),其中Col2)按Col1分组,Col2),”
小心点,它会慢下来的

公式的主要部分是查询:

select Col1, min(Col2) where Col2 <>0 group by Col1...
选择Col1,min(Col2),其中Col2 0按Col1分组。。。
更改它以获得不同的结果(最大值、最小值、总和、平均值、一些计算值等)


如果有人想探索这个公式,这里有一个逐步的解决方案。

max ArrayFunction不存在,所以唯一的方法是解决方法。假设您有一些数字在范围
A1:C5
中。得到的范围是
D1:D5

您所需要的只是单元格
D1
中的单个公式:

=QUERY(QUERY({ArrayFormula(REGEXEXTRACT(TRANSPOSE(SPLIT(ArrayFormula(CONCATENATE(row(A1:C5)&"*"&A1:C5&"/")),"/")),"\d+")),ArrayFormula(REGEXEXTRACT(TRANSPOSE(SPLIT(ArrayFormula(CONCATENATE(row(A1:C5)&"*"&A1:C5&"/")),"/")),"[*](\d+)")*1)},"select Col1, min(Col2) where Col2 <>0 group by Col1 label min(Col2) ''"),"select Col2")
=QUERY(查询({ArrayFormula(REGEXEXTRACT)(转置)(拆分(ArrayFormula)(CONCATENATE)(行(A1:C5)和“*”&A1:C5&“/”)),“/”),“/”),“\d+”),ArrayFormula(REGEXEXTRACT)(转置(拆分(ArrayFormula)(行(A1:C5)和“*”&A1:C5&“/”),“/”),“/”),“/”,“/”,“[*”,”,“*”,”,“*”,”,”,“*”,”,”,“(\d+)*1),“选择Col1,最小(Col2),其中Col2)按Col1分组,Col2),”
小心点,它会慢下来的

公式的主要部分是查询:

select Col1, min(Col2) where Col2 <>0 group by Col1...
选择Col1,min(Col2),其中Col2 0按Col1分组。。。
更改它以获得不同的结果(最大值、最小值、总和、平均值、一些计算值等)


如果有人想探索这个公式,下面是一步一步的解决方案。

除了获得每行的最小值(允许一次数组输出)外,还可以尝试:


除了获得每行的最小值(允许一次数组输出)外,请尝试: