9

我需要知道如何从行中排除 0 并获取 MIN 值。

但我也需要排除 F1 单元。

前任:

A  B  C    D  E   F
1  0  18  20  0  150  = 18

但如果我在 excel 中使用 =MIN(A1,B1,C1,D1,E1) 返回 0。

任何帮助表示赞赏。

4

10 回答 10

10

试试这个公式

=SMALL((A1,C1,E1),INDEX(FREQUENCY((A1,C1,E1),0),1)+1)

SMALL 和 FREQUENCY 函数都接受“联合”作为参数,即用逗号分隔并用括号括起来的单个单元格引用,如 (A1,C1,E1)。

因此,该公式使用 FREQUENCY 和 INDEX 来查找范围内零的数量,如果将其加 1,则得到 k 值,使得第 k 个最小值始终是除零之外的最小值。

我假设你没有负数......

于 2013-05-15T23:01:46.497 回答
9

在结果单元格中输入以下内容,然后在按 ENTER 的同时按 Ctrl 和 Shift:

=MIN(If(A1:E1>0,A1:E1))
于 2013-05-15T22:30:17.353 回答
8

到目前为止,最有效的方法是使用 SMALL 和 COUNTIF 公式,如下所示;

SMALL 返回数据集中的第 k 个最小值。

=小(A1:A100,COUNTIF($A$1:$A$100,0)+1)

其中 countif 计算范围 (+1) 中的零,并用于告诉 SMALL 返回第 k 个最小值。

信用:链接

于 2016-04-14T06:15:33.083 回答
2

不完全确定您在这里想要什么,但是如果您想在范围内打折空白单元格并传递零,那么就可以了;如果有点做作:

=MIN(IF(A1:E1=0,MAX(A1:E1),A1:E1))

使用 Ctrl+Shift+Enter 作为数组。

我在这里做的是用列表中的最大值替换零。

于 2013-05-16T07:39:12.150 回答
2

如果你所有的价值都是积极的,你可以做 -max(-n)

于 2014-01-08T04:14:16.443 回答
1

列出的解决方案并不完全适合我。最接近的是 Wiggum 酋长 - 我想对他的回答添加评论,但缺乏这样做的声誉。所以我作为单独的答案发布:

=MIN(IF(A1:E1>0;A1:E1))

然后不要按 ENTER,而是按 CTRL+SHIFT+ENTER 并观察 Excel 分别将{和添加}到公式的开头和结尾(以激活数组上的公式)。

Chief Wiggum 提出的逗号“,”和“If”语句不适用于 Excel Home and Student 2013。需要分号“;” 以及全盖“IF”成功了。语法差异很小,但我花了 1.5 小时才弄清楚为什么会出现错误和#VALUE。

于 2018-07-28T03:37:55.537 回答
1

把我的帽子扔进戒指:

1) 首先我们对一组整数执行 NOT 函数,将非零值评估为 0,将零值评估为 1

2)然后我们在原始整数集中搜索 MAX

3) 然后我们将步骤 1 中生成的集合中的每个数字乘以步骤 2 中找到的 MAX,将 1 设置为 0,将 0 设置为 MAX

4)然后我们将步骤3中生成的集合添加到我们的原始集合中

5) 最后,我们在步骤 4 中生成的集合中寻找 MIN

{=MIN((NOT(A1:A5000)* MAX(A1:A5000))+ A1:A5000)}

如果您知道数字的粗略范围,则可以将 MAX(RANGE) 替换为常数。这稍微加快了速度,仍然不足以与更快的功能竞争。


还对 5000 个整数的数据集进行了快速测试,公式执行了 5000 次。

{=SMALL(A1:A5000,COUNTIF(A1:A5000,0)+1)}

1.700859 秒已过去 | 5,301,902 个刻度已过去

{=SMALL(A1:A5000,INDEX(FREQUENCY(A1:A5000,0),1)+1)}

1.935807 秒过去 | 6,034,279 个刻度已过去

{=MIN((NOT(A1:A5000)* MAX(A1:A5000))+ A1:A5000)}

3.127774 秒经过 | 9,749,865 个刻度已过去

{=MIN(If(A1:A5000>0,A1:A5000))}

3.287850 秒经过 | 10,248,852 个刻度已过去

{"=MIN(((A1:A5000=0)* MAX(A1:A5000))+ A1:A5000)"}

3.328824 秒经过 | 10,376,576 个刻度已过去

{=MIN(IF(A1:A5000=0,MAX(A1:A5000),A1:A5000))}

3.394730 秒已过去 | 10,582,017 个刻度已过去

于 2019-05-16T02:32:58.033 回答
0

min() 函数不包括 BOOLEAN 和 STRING 值。如果你用“”(空字符串)替换你的零 - min() 函数将按照你的意愿完成它的工作!

于 2016-12-17T10:58:36.767 回答
0

在 Microsoft 365 中,您可以使用新功能 MINIFS

=MINIFS(A1:E1;A1:E1;">0")

给 1

=MINIFS(A1:E1;A1:E1;">1")

给 18

*代替 ; ,如果使用英文版

于 2021-06-22T15:26:51.740 回答
-3

您所要做的就是删除包含它的单元格中的“0”,然后重试。那应该行得通。

于 2017-05-08T17:58:01.577 回答