Calc,查找最小值指数的公式

Calc,查找最小值指数的公式

在 LibreOffice Calc 中,是否可以编写一个公式,给定一列未排序的数据(见下面的示例),返回大于零的最小值的最大索引?以下方法几乎有效:

{=MATCH(MIN(IF(A1:A16>0,A1:A16)),A1:A16,0)}

但是它返回的索引是 11,而不是 16,数据如下所示。

直方图数据

答案1

假设所有单元格都包含整数,您可以修改公式以添加小数偏移量来偏置条目。我发现以下内容适用于我的测试数据(我没有输入您的所有内容):

=MATCH(MIN(IF(A1:A16>0,A1:A16+0.9/ROW(A1:A16))),A1:A16+0.9/ROW(A1:A16),0)

我用两个1条目填充了前 10 行,它找到了第二个条目1,当我添加更多行时,每当我添加另一个条目时,它都会返回最后一个条目1。请注意,它是一个标量函数,因此没有{}括号。

答案2

要采取你所做的事情并逆转它,创建一个用户定义基本函数

Function REVERSE_ARRAY(aIn)
    If NOT IsArray(aIn) Then
        REVERSE_ARRAY = "Err:520"
        Exit Function
    End If
    Dim aOut(LBound(aIn,1) To UBound(aIn,1), _
        LBound(aIn,2) To UBound(aIn,2)) As Single
    Dim i As Integer, reverse_i As Integer
    For i = LBound(aIn,1) to UBound(aIn,1)
        reverse_i = LBound(aIn,1) + UBound(aIn,1) - i
        aOut(reverse_i, 1) = aIn(i, 1)
    Next i
    REVERSE_ARRAY = aOut()
End Function

修改数组函数,使其如下所示:

17-MATCH(MIN(IF(A1:A16>0,A1:A16)),REVERSE_ARRAY(A1:A16),0)

在我的测试中,这种方法和@AFH 的答案产生了相同的结果。

相关内容