Obter caracteres à direita de um caractere numérico no Excel

0

Eu queria saber se existe uma maneira no Excel de obter os caracteres de cada célula diretamente do número. Por exemplo, o exemplo abaixo

PW22CL -> CL
PW22CLB -> CLB
PW22EBS ->EBS
PW22EK -> EK
PW22FL ->FL
PW22HF -> HF
W21M -> M
W21OB ->OB

Existe alguma maneira de eu colocar o regex nas funções regulares LEFT, RIGHT, MID, FIND no excel?

    
por user3426338 29.09.2016 / 23:16

3 respostas

2

Se você não quiser usar o VBA:

Método 1: Use este fórmula de matriz :

=RIGHT(A1,LEN(A1)-MAX(IF(ISNUMBER(VALUE(MID(A1,ROW(INDIRECT("1:" & LEN(A1))),1))),ROW(INDIRECT("1:" & LEN(A1))))))

Lembre-se de pressionar CTRL + SHIFT + ENTER para avaliá-lo.

Método 2: ou use este fórmula de matriz :

=RIGHT(A1,LEN(A1)-MAX(IFERROR(FIND({1,2,3,4,5,6,7,8,9,0},A1,ROW(INDIRECT("1:"&LEN(A1)))),0)))

Lembre-se de pressionar CTRL + SHIFT + ENTER para avaliá-lo.

Método 3: ou esta fórmula regular se você estiver usando o Excel 2010 ou superior (pois ele usa o Função AGREGADA ) :

=RIGHT(A1,LEN(A1)-AGGREGATE(14,6,FIND({1,2,3,4,5,6,7,8,9,0},A1,ROW(INDIRECT("1:"&LEN(A1)))),1))

Suposição: Cell A1 contém o valor que você precisa para obter os 2 últimos caracteres de.

    
por 29.09.2016 / 23:35
1

Você pode usar essa fórmula normalmente inserida, que deve funcionar na maioria das versões do Excel.

=MID(A2,LOOKUP(2,1/ISNUMBER(-MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),ROW(INDIRECT("1:"&LEN(A2))))+1,99)For a non-volatile form, useful if you have a large worksheet, 

Ou, para evitar funções voláteis, você pode definir um nome seq em que:

seq Refers To:  =ROW(INDEX($1:$65536,1,1):INDEX($1:$65536,255,1))

Em seguida, use esta fórmula:

=MID(A1,LOOKUP(2,1/ISNUMBER(-MID(A1,seq,1)),seq)+1,99)

Explicação

  • seq ou Row(Indirect... retornam uma matriz de inteiros 1..n
  • O segundo MID(... retorna uma matriz de cada caractere individual na string
  • 1/isnumber(-MID(... retorna uma matriz de erro ou 1
  • O LOOKUP , nessa situação, retornará a posição do último valor numérico na string. Está combinando o último valor na matriz que é menor que lookup_value. Isso nos dá o número inicial dos caracteres alfa terminais.
por 30.09.2016 / 03:19
0

Que tal este pequeno UDF () :

Public Function JunkOnTheRight(sIN As String) As String
    Dim i As Long

    For i = Len(sIN) To 1 Step -1
        If IsNumeric(Mid(sIN, i, 1)) Then
            JunkOnTheRight = Mid(sIN, i + 1)
        Exit Function
        End If
    Next i
End Function

    
por 29.09.2016 / 23:28