热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Excel技巧:在范围内查找所有最小值,而不仅仅是首个最小值

探讨了如何在Excel中查找指定范围内的所有最小值,即使这些最小值出现多次,也能确保每个实例都被识别和显示。

在Excel中,当我需要在一个数值列表中找出最小值时,例如9, 18, 12, 9,虽然两个9都是最小值,但默认的MIN函数只会返回首次出现的最小值。为了提高结果的准确性,我希望不仅能标识出首次出现的最小值,还能同时标识出第二次出现的最小值。具体来说,这些数值所在的列代表不同的位置,数值本身则反映了前往该位置的难易程度。因此,如果两个位置的难度值都为9,我希望有一种方法能够同时显示这两个位置的信息,以确保所有符合条件的结果都能被用户看到。请问是否有方法可以在使用MIN函数时,让结果同时包括所有出现的最小值?或者,是否可以通过某种方式,在初次查找最小值后,再次查找时不考虑已找到的最小值,从而定位到下一个最小值?


非常感谢您的帮助。


解决方案



#1 使用数组公式




假设数据位于A列,在C1单元格中输入以下数组公式:


=IFERROR(SMALL(IF(($A$1:$A$20)=MIN($A$1:$A$20), ROW($A$1:$A$20), ""), ROW()), "")

然后向下复制该公式。请注意,数组公式需要通过按Ctrl+Shift+Enter来输入,而不是简单的Enter键。此公式将返回包含最小值的所有单元格的行号。




#2 使用VBA进行循环查找




另一种方法是使用VBA脚本,通过循环遍历找到的所有最小值。下面是一个示例代码,其中包含了循环中的FindNext操作,用于查找所有匹配的最小值:


Dim rngFound As Range
Dim rngSearch As Range
Dim SrchVal As Variant
Dim FirstFind As String

Set rngSearch = Range("A1:A20")
SrchVal = Application.WorksheetFunction.Min(rngSearch)

Set rngFound = rngSearch.Find(SrchVal, LookIn:=xlValues)
If Not rngFound Is Nothing Then
FirstFind = rngFound.Address
Do
' 对找到的值执行操作
Set rngFound = rngSearch.FindNext(rngFound)
Loop Until rngFound.Address = FirstFind
End If

这段代码首先定义了搜索范围和要查找的最小值,然后通过Find方法找到第一个最小值的位置。之后,通过FindNext方法在循环中继续查找其他匹配项,直到回到最初找到的位置为止。



推荐阅读
author-avatar
mobiledu2502885407
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有