Calc, fórmula para encontrar o índice do valor mínimo

0

No LibreOffice Calc, é possível escrever uma fórmula que, dada uma coluna de dados não classificados (veja o exemplo abaixo), retorna o maior índice do valor mínimo maior que zero? O seguinte quase funciona:

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

mas retorna um índice de 11 em vez de 16 com os dados mostrados abaixo.

    
por ctuffli 08.03.2016 / 01:21

2 respostas

1

Desde que todas as células contenham números inteiros, você pode modificar sua fórmula para adicionar um deslocamento fracionário para influenciar as entradas. Eu achei que o seguinte funciona nos meus dados de teste (eu não digitei todos os seus):

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

Eu preenchi as primeiras 10 linhas com dois 1 entradas e encontrei o segundo 1 , e conforme adicionei mais linhas, ele retornou a última entrada sempre que eu adicionei outro 1 . Note que é uma função escalar, portanto, não há chaves {} circunvizinhas.

    
por 08.03.2016 / 18:46
0

Para fazer o que você fez e reverter isso, crie uma Função básica definida pelo usuário :

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

Modifique a função de matriz para que isso seja dito:

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

Nos meus testes, esta abordagem e a resposta do @ AFH produziram os mesmos resultados.

    
por 08.03.2016 / 20:11