Convertendo códigos de barras para um formato específico usando a função IF, FIND & MID do excel

4

No Excel, tenho várias colunas contendo caracteres de diferentes tipos, como:

WS-S5-S-L1-C31-F-U5-S9-P14 
WS-S5-S-L1-C31-F-U5-S8-P1 
WS-S5-N-L1-C29-V-U16-S6-P6 

Eu quero convertê-los em 8 caracteres usando as seguintes regras:

  • mantenha apenas os três últimos segmentos
  • remova o U e adicione o prefixo 0 quando apropriado
  • remova S e adicione o prefixo 0 quando apropriado
  • remova P e adicione o prefixo 0 quando apropriado

Por exemplo:

  • WS-S5-S-L1-C31-F-U5-S9-P14 convert em 05-09-14
  • WS-S5-S-L1-C31-F-U5-S8-P1 convert em 05-08-01
  • WS-S5-N-L1-C29-V-U16-S6-P6 convert em 16-06-06

Acredito que exista uma maneira de usar IF , FIND & MID função para convertê-los no Excel, mas não sabe como começar. Qualquer ajuda será muito apreciada.

Atualizar

Por fim, queria converter isso em 13 caracteres, se possível, por exemplo:

  • WS-S5-S-L1-C31-F-U5-S9-P14 converter para S1-F-05-09-14
  • Conversão WS-S5-N-L2-C31-D-U5-S8-P1 para N2-D-05-08-01
  • WS-S5-N-L1-C29-V-U16-S6-P6 convergem em N1-V-16-06-06
por Indy 23.05.2018 / 06:08

2 respostas

6

Como @ygaft apontou, é possível, mas será longo com as funções padrão do Excel.

Eu uso o suplemento gratuito RegEx Find / Replace em situações como essa, usando uma expressão regular você pode conseguir mais fácil.

A fórmula: =RegExReplace(RegExReplace(A1,".*U([0-9]+)-S([0-9]+)-P([0-9]+)","0$1-0$2-0$3"),"0([0-9]{2})","$1")

Como funciona:

  • função interna:
    • A1 : do conteúdo da célula A1
    • ".*U([0-9]+)-S([0-9]+)-P([0-9]+)" procura um padrão "... U # -S # -P #" onde "#" representa um ou mais números e lembra os números (colchetes criam grupos de referência)
    • "0$1-0$2-0$3" mescla os números encontrados na etapa anterior, adicionando 0 à frente a todos eles.
  • função externa:
    • RegExReplace(...) - funciona com resultados da função interna
    • "0([0-9]{2})" - procura por 0 seguido por dois dígitos (= casos em que 0 não é necessário)
    • "$1" - mantém apenas os dois dígitos, descartando 0 (somente nos casos que foram correspondidos na etapa anterior)

Vocêtambémpodevermaisexplicaçõessobreasexpressõesregulareson-line:

  • primeiropasso: link
  • segundo passo: link

Observação: não sou afiliado de forma alguma com esse suplemento, apenas use-o para facilitar minha vida.

Atualizar

Você pode usar essa fórmula para seu código de 13 caracteres:
=RegExReplace(RegExReplace(A3,".*-([A-Z])-[A-Z]([0-9]).*-([A-Z])-U([0-9]+)-S([0-9]+)-P([0-9]+)","$1$2-$3-0$4-0$5-0$6"),"0([0-9]{2})","$1")

    
por 23.05.2018 / 10:21
5

Muito feio,
mas você pode alcançá-lo da seguinte forma, assume que seus dados de trabalho estão na coluna A:

=TEXT(LEFT(RIGHT(A1,LEN(A1)-FIND("U",A1,1)),FIND("-",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)-1),"00")&"-"&TEXT(MID(RIGHT(A1,LEN(A1)-FIND("U",A1,1)),FIND("-",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)+2,(FIND("P",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)-2-FIND("S",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1))),"00")&"-"&TEXT(RIGHT(RIGHT(A1,LEN(A1)-FIND("U",A1,1)),LEN(RIGHT(A1,LEN(A1)-FIND("U",A1,1)))-FIND("P",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)),"00")
    
por 23.05.2018 / 09:22