Fórmula do Excel para classificar uma linha e retornar valores classificados em células adjacentes

1

Eu tenho um conjunto de valores alfanuméricos em várias linhas. Por exemplo,

 a1          b1        c2     
 b1          a2        d3     
 c1          a2        d3     

Eu quero classificar valores é linha 1, linha 2 e linha 3 individualmente em células adjacentes. Para. eg

 a1          b1        c2     =>       a1          b1        c2       
 b1          a2        d3     =>       a2          b1        d3
 c1          a2        d3     =>       a2          c1        d3

Eu posso fazer isso por duas linhas, mas por mais de duas linhas ficou complicado.

    
por Ruby Ponnudurai 30.06.2017 / 10:01

1 resposta

0

Relativamente fácil de fazer com o VBA e uma função definida pelo usuário. Como há apenas alguns itens para classificar, usei um simples BubbleSort. Outros métodos também podem ser usados.

Para entrar nesta Função Definida pelo Usuário (UDF), alt-F11 abre o Editor do Visual Basic. Certifique-se de que seu projeto esteja destacado na janela Explorador de Projetos. Em seguida, no menu superior, selecione Inserir / Módulo e cole o código abaixo na janela que é aberta.

Para usar esta função definida pelo usuário (UDF), insira uma fórmula como

=sortAlpha(A1:C1)

em um intervalo de células que se estende pelo seu destino (por exemplo: E1: G1) e, em seguida, preencha.

Esta é uma fórmula de matriz e retornará uma matriz de valores. Então, para entrar você pode, por exemplo:

  • Primeiro selecione E1: G1
  • Em seguida, coloque o cursor na barra de fórmulas e insira a fórmula
  • Finalmente, em vez de apenas apertar enter , você deve manter pressionado ctrl + shift enquanto pressiona enter . Se você fizer isso corretamente, o Excel colocará chaves {...} ao redor da fórmula
Option Explicit

'Comment out next line for case sensitive sorting
Option Compare Text

Function sortAlpha(rg As Range) As String()
    Dim S() As String
    Dim C As Range
    Dim I As Long

ReDim S(0 To rg.Count - 1)
For Each C In rg
    S(I) = C.Text
    I = I + 1
Next C

SingleBubbleSort S

sortAlpha = S

End Function
Sub SingleBubbleSort(TempArray As Variant)
'copied directly from support.microsoft.com
    Dim Temp As Variant
    Dim I As Integer
    Dim NoExchanges As Integer

    ' Loop until no more "exchanges" are made.
    Do
        NoExchanges = True

        ' Loop through each element in the array.
        For I = LBound(TempArray) To UBound(TempArray) - 1

            ' If the element is greater than the element
            ' following it, exchange the two elements.
            If TempArray(I) > TempArray(I + 1) Then
                NoExchanges = False
                Temp = TempArray(I)
                TempArray(I) = TempArray(I + 1)
                TempArray(I + 1) = Temp
            End If
        Next I
    Loop While Not (NoExchanges)
End Sub

    
por 30.06.2017 / 14:56