Как удалить остальную информацию из ячейки и оставить только часть?

Как удалить остальную информацию из ячейки и оставить только часть?

если возможно, я бы хотел убрать все и получить идентификатор заказа. Проблема в следующем: местоположение идентификатора заказа, и иногда он начинается с Aили 1.

  • Пример ячейки A1:{"Ref":"bad order","OrderId":"ABSER27"}
  • Пример ячейки A2:{"OrderId":"ABSER27"}
  • Пример ячейки A3:{"order_id":"12345678","customer_email":"[email protected]"}

  • Желаемый результат: B1 = ABSER27
  • Желаемый результат: B3 = ABSER27
  • Желаемый результат: B3 = 12345678

решение1

Жизнь может стать проще с функцией Excel «Текст по столбцу».

Шаг 1 — Разрежьте струны на столбики.

Сначала удалите начальные {и конечные }. Вы можете сделать это с помощью функции replace или, если хотите, с помощью функции =MID(A1,2,LEN(A1)-2).

Это приведет к получению следующих исходных данных: введите описание изображения здесь

Далее выберите столбец A (без { }) и на ленте выберите Данные > Инструменты данных > Текст в столбцы. Используйте следующие параметры: введите описание изображения здесь введите описание изображения здесь

Тогда информация будет представлена ​​аккуратно в 4 столбцах: введите описание изображения здесь

Шаг 2 — Выберите идентификатор заказа из столбцов

После этого вы можете делать все, что захотите, чтобы получить идентификатор заказа. Простым способом будет поместить формулу, скажем, в столбец G с ячейкой G1, содержащей следующую формулу:

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

Поскольку "OrderId" может также иметь форму "order_id" из примера, мы используем подстановочный знак *для сопоставления. Затем формула выберет ячейку справа от "OrderId". введите описание изображения здесь

решение2

Для решения такого рода задач я используюНадстройка Regex Find/Replace
(Я никак с этим не связан, просто энтузиаст-пользователь.)

При этом вы можете использовать регулярные выражения, например:
=RegExReplace(UPPER(A1),".*ORDER_?ID"":""([^""]+)"".*","$1")

введите описание изображения здесь

решение3

В ячейке B2 используйте функцию Mid

Текст =A2

Начальный номер = используйте функцию поиска (поиск не чувствителен к регистру, в отличие от функции «Найти»), чтобы найти позицию «id» в ячейке A2, начиная с позиции 1, а затем добавьте количество символов к номеру заказа.

Количество символов — это разница между начальным номером и следующей позицией двойной кавычки (символ ASCII 34).

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

ИЗМЕНИТЬ, чтобы разрешить дополнительный «ID/id» в поле «Электронная почта» или идентификатор заказа без необходимости использования надстройки или VBA

Поместите истинные и ложные утверждения MID в оператор IF, который проверяет, есть ли более одного идентификатора и что адрес электронной почты не является первым полем, разделенным запятыми.

 =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))
)
)

решение4

На основе представленной вами информации — Order ID идет от первого Aили 1в поле, до первого следующего "(кавычки) — это несложно. Проще всего использовать несколько «вспомогательных столбцов»:

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

C1и D1находим первый Aи 1, соответственно, в ячейке  A1. Если их нет, FINDвозвращает ошибку, и, используя IFERROR, мы устанавливаем значение длины A1плюс один; т. е. смещение следующего символа после последнего символа.  E1— меньшее из них; поэтому, если был найден хотя бы один Aили 1, E1указывает на первый. Если их нет, то это также длина+1.

И теперь F1находит первый "после вышеперечисленного. Если нет ", то это ошибка. Если не было Aили 1, E1то это длина A1+1, и это F1тоже ошибка.

Итак, наконец, мы установили

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

Если F1это ошибка, просто отобразите ERRORиндикатор. В противном случае извлеките подстроку из MIDdle of A1, начиная с местоположения Aor 1, и с длиной, которая доходит до (но не включая) разделяющего ".

Связанный контент