作者:mobiledu2502885407 | 来源:互联网 | 2024-12-10 16:15
在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
方法在循环中继续查找其他匹配项,直到回到最初找到的位置为止。