Fórmula do Excel para dividir uma célula e inverte a ordem

1

Um exemplo de célula de origem seria algo como:

Some:Thing:random:here

Eu quero transformá-lo para isso (invertendo a ordem de cada grupo):

here:random:Thing:Some

Eu preferiria uma fórmula, sem usar macros, se possível.

Esta é a fórmula que estou tentando manipular para alterar a última parte de um IP.

=IF(C12="","",SUBSTITUTE(LEFT(SUBSTITUTE(C12,".","."&REPT("",LEN(C12))),LEN(C12)*2)&MID(SUBSTITUTE(C12,".","."&REPT("> ",LEN(C12))),LEN(C12)*2,LEN(C12))&"5"," ",""))

    
por BondUniverse 26.09.2013 / 16:36

2 respostas

3

Assumindo três pontos como separadores, tente esta fórmula

=IF(C12="","",TRIM(MID(SUBSTITUTE(C12,":",REPT(" ",100)),300,100))&":"&TRIM(MID(SUBSTITUTE(C12,":",REPT(" ",100)),200,100))&":"&TRIM(MID(SUBSTITUTE(C12,":",REPT(" ",100)),100,100))&":"&LEFT(C12,FIND(":",C12)-1))

Explicação:

Para obter a parte após o último cólon, usei esta fórmula:

=TRIM(MID(SUBSTITUTE(C12,":",REPT(" ",100)),300,100))

Utiliza SUBSTITUTE para substituir cada dois pontos por 100 espaços. Como estamos lidando com endereços IP, cada parte é claramente um pequeno número de caracteres, então usar MID para obter 100 caracteres a partir do caractere 300 incluirá apenas a última parte do endereço IP e alguns espaços - TRIM então apara a espaços - usei a mesma abordagem para obter as duas partes do meio e, em seguida, a função LEFT combinada com FIND para obter a primeira parte

    
por 26.09.2013 / 21:37
0

Assim, pode haver uma maneira de resolver isso sem usar o VBA, mas aqui está uma fórmula definida pelo usuário que você pode usar para fazer exatamente o que está pedindo, além de lidar com diferentes delimitadores:

Function ReverseList(InputString As String, Optional DelimiterString As String) As String

' Provide a default value of "," as the delimiter.
If Len(DelimiterString) = 0 Then
    LabelString = ","
End If

' The InputArray() will contain the values, separated at the delimiter string.
Dim InputArray() As String
InputArray() = Split(InputString, DelimiterString)

' The OutputArray() will contain the values in reverse order.
Dim i As Integer
Dim j As Integer
j = UBound(InputArray)
Dim OutputArray() As String
ReDim OutputArray(0 To j) As String

For i = 0 To j
    OutputArray(i) = InputArray(j - i)
Next i

' Now we put the reversed list back together, adding the delimiter back in.
ReverseList = Join(OutputArray(), DelimiterString)

End Function

Você pode chamar isso em uma célula com =ReverseList(A1, ":") para lidar com seu exemplo.

Embora seja assustador criar o seu primeiro UDF, é bastante simples se você siga os passos .

    
por 26.09.2013 / 20:10