Como retirar o restante das informações de uma célula e manter apenas uma parte?


0

se possível, gostaria de remover tudo e obter o ID do pedido. o problema é: Localização do ID do pedido e, algumas vezes, começa com Aou 1.

  • Exemplo de célula A1: {"Ref":"bad order","OrderId":"ABSER27"}
  • Exemplo de célula A2: {"OrderId":"ABSER27"}
  • Exemplo de célula A3: {"order_id":"12345678","customer_email":"BADORDER@gmail.com"}

  • Resultado desejado: B1 = ABSER27
  • Resultado desejado: B3 = ABSER27
  • Resultado desejado: B3 = 12345678

Eu acho que você vai precisar de vba. Faça um loop pelas células para encontrar uma versão regexp do orderid que cubra todas as possibilidades, procure as aspas de abertura ou desloque-as por três (aspas, dois pontos, aspas) e copie até as próximas (fechamento) aspas.
Mcalex

O que você quer dizer com "em algum momento começa com Aou 1"? Se começar com Aou 1não for a característica definidora, como saber onde começa o ID do pedido?
Scott

Respostas:


1

A vida pode ser mais fácil com a função "Texto para coluna" do Excel.

Etapa 1 - Pique as cordas em colunas

Primeiro, retire a guia {e a trilha }. Você pode fazê-lo com a função de substituição ou, se desejar, com uma função =MID(A1,2,LEN(A1)-2),.

Isso resultará em dados de origem como: insira a descrição da imagem aqui

Em seguida, selecione a coluna A (sem { }) e, na faixa de opções, selecione Dados> Ferramentas de dados> Texto em colunas. Use as seguintes opções: insira a descrição da imagem aqui insira a descrição da imagem aqui

Em seguida, você terá as informações apresentadas ordenadamente em 4 colunas: insira a descrição da imagem aqui

Etapa 2 - Escolha o ID do pedido nas colunas

Depois disso, você pode fazer o que quiser para selecionar o ID do pedido. Um simples seria colocar uma fórmula, digamos, na coluna G com a célula G1 com a fórmula abaixo:

=INDIRECT("RC"&MATCH("order*id",A1:F1,0)+1,FALSE)

Como "OrderId" também pode estar no formato "order_id" do exemplo, usamos um curinga *para fazer a correspondência. A fórmula buscará a célula à direita de "OrderId". insira a descrição da imagem aqui


0

Para esse tipo de problema, eu uso o suplemento Regex Find / Replace
( não sou afiliado de forma alguma a ele, apenas um usuário entusiasta )

Com isso você pode usar expressões regulares, por exemplo:
=RegExReplace(UPPER(A1),".*ORDER_?ID"":""([^""]+)"".*","$1")

insira a descrição da imagem aqui


0

Na célula B2, use a função Mid

Texto = A2

Número inicial = Use a função Pesquisa (a pesquisa não diferencia maiúsculas de minúsculas, enquanto Localizar é) para localizar a posição do "id" na célula A2 a partir da posição 1 e adicione o número de caracteres ao Número do pedido.

Número de caracteres é a diferença do número inicial para a próxima posição de aspas duplas (caractere ASCII 34).

=MID(A2,SEARCH("id",A2,1)+5,(FIND(CHAR(34),A2,(SEARCH("id",A2,1)+5))-(SEARCH("id",A2,1)+5)))

EDITAR para permitir "ID / ID" adicional no campo E-mail ou ID do pedido sem a necessidade de suplemento ou VBA

Coloque as instruções MID verdadeiras e falsas dentro de um IF que verifique se há mais de um ID e se o endereço de email não é o primeiro campo separado por vírgula.

 =IF(
AND((LEN(A2)-LEN(SUBSTITUTE(UPPER(A2),("ID"),"")))/LEN("ID")>1,ISERROR(FIND("@",LEFT(A2,FIND(",",A2)-1),1))=FALSE),

MID(A2,
FIND("~",SUBSTITUTE(UPPER(A2),"ID","~",2),1)+5,
FIND(CHAR(34),A2,FIND("~",SUBSTITUTE(UPPER(A2),"ID","~",2),1)+5)-(FIND("~",SUBSTITUTE(UPPER(A2),"ID","~",2),1)+5)
),

MID(A2,
SEARCH("ID",A2,1)+5,
(FIND(CHAR(34),A2,(SEARCH("ID",A2,1)+5))-(SEARCH("ID",A2,1)+5))
)
)

O mesmo problema, como na resposta de Scott, pode dar resultados incorretos se outros campos também contiverem "id".
Máté Juhász

@ Máté Juhász atualizado para acomodar seu comentário
Antony

-1

Com base nas informações que você apresentou - o ID do pedido é executado desde o primeiro Aou 1no campo, até o primeiro "(cotação) - isso não é difícil. É mais fácil se usarmos algumas "colunas auxiliares":

  • C1=IFERROR(FIND("A",$A1), LEN($A1)+1)
  • D1=IFERROR(FIND("1",$A1), LEN($A1)+1)
  • E1=MIN($C1,$D1)
  • F1=FIND("""", $A1, $E1)

C1e D1encontre o primeiro Ae 1, respectivamente, na célula  A1. Se não houver, FINDretorna um erro e, usando IFERROR, definimos o valor com o comprimento de A1mais um; ou seja, o deslocamento do próximo caractere após o último caractere.  E1é o menor deles; portanto, se pelo menos um Aou 1foi encontrado, E1aponta para o primeiro. Se não houver, também terá o comprimento + 1.

E agora F1encontra o primeiro "após o acima. Se não houver ", isso é um erro. Se não houve um Aou a 1, E1é o comprimento de A1+1 e F1também é um erro.

Então, finalmente, definimos

  • B1=IF(ISERROR($F1), "ERROR", MID($A1, $E1, $F1-$E1))

Se F1houver um erro, basta exibir um ERRORindicador. Caso contrário, extraia a substring do MIDdle de A1, começando no local do Aou 1, e com um comprimento que leve até (mas não incluindo) a delimitação ".


Possível problema se que "CUSTOMER_EMAIL": "BADORDER@gmail.com" vem antes do order_id em seqüência, ou "ref": "mau ordem" fica capitalizado
mcalex

Afirmei meu entendimento dos requisitos e solicitei esclarecimentos ao OP. Com base no meu entendimento dos requisitos, a entrada que você sugere não pode / não ocorrerá.
Scott

portanto, 'possível'. Percebo que às vezes o order_id é o primeiro item, às vezes não. Presumo que, já que 'order_id' pode ser maiúsculo ou às vezes ter sublinhado, que outras coisas também podem mudar.
Mcalex 31/08/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.