Можно ли в LibreOffice Calc написать формулу, которая, учитывая столбец несортированных данных (см. Пример ниже), возвращает наибольший индекс минимального значения больше нуля? Следующее почти работает:

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

но он возвращает индекс 11 вместо 16 с данными, показанными ниже.

Данные гистограммы

2 ответа2

1

При условии, что все ячейки содержат целые числа, вы можете изменить формулу, добавив дробное смещение для смещения записей. Я обнаружил, что следующие данные работают с моими тестовыми данными (я не набрал все ваши):

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

Я заполнил первые 10 строк двумя 1 записями, и он нашел вторую 1 , и когда я добавил больше строк, он возвращал последнюю запись всякий раз, когда я добавил еще 1 . Обратите внимание, что это скалярная функция, поэтому здесь нет окружающих скобок {} .

0

Чтобы взять то, что вы сделали, и повернуть вспять, создайте пользовательскую базовую функцию:

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 дали одинаковые результаты.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .