Як зняти іншу інформацію з комірки та зберегти лише частину?


0

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

  • Приклад комірки A1: {"Ref":"bad order","OrderId":"ABSER27"}
  • Приклад комірки A2: {"OrderId":"ABSER27"}
  • Приклад комірки A3: {"order_id":"12345678","customer_email":"BADORDER@gmail.com"}

  • Бажаний результат: B1 = ABSER27
  • Бажаний результат: B3 = ABSER27
  • Бажаний результат: B3 = 12345678

Я думаю, вам знадобиться vba. Проведіть крізь клітинки, щоб знайти версію регулярного виразу порядкового порядку, яка охоплює всі можливості, потім або шукайте початкові лапки, або зміщуйте на три (лапки, двокрапки, лапки) і копіюйте до наступних (закриваючих) лапок.
mcalex

Що ви маєте на увазі, "колись це починається з" Aабо 1"? Якщо починається з визначальної характеристики Aабо 1не є то, як ми визначимо, звідки починається ідентифікатор замовлення?
Скотт

Відповіді:


1

Життя може бути простішим за допомогою функції "Текст до стовпця" Excel.

Крок 1 - Розбийте рядки в стовпці

По-перше, роздягніть провідну {та кінцеву }. Ви можете зробити це з заміною функції, або якщо ви хочете зробити це за допомогою функції =MID(A1,2,LEN(A1)-2).

Це призведе до отримання вихідних даних, таких як: введіть тут опис зображення

Далі виберіть стовпчик А (без { }) та зі стрічки виберіть Дані> Інструменти даних> Текст до стовпців. Використовуйте наступні параметри: введіть тут опис зображення введіть тут опис зображення

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

Крок 2 - Виберіть ідентифікатор замовлення зі стовпців

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

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

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


0

Для цього типу проблем я використовую надбудову Regex Find / Replace
( я жодним чином не пов'язаний з цим, просто ентузіаст-користувач )

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

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


0

У комірці B2 використовуйте функцію Mid

Текст = A2

Початковий номер = Використовуйте функцію пошуку (пошук не враховує регістри, тоді як Find is), щоб знайти позицію "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)))

РЕДАКТУВАТИ, щоб дозволити додаткове "ідентифікатор / ідентифікатор" у полі електронної пошти або ідентифікатор замовлення без необхідності додавання або 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))
)
)

Це ж питання, як і у відповіді Скотта, може дати неправильні результати, якщо інші поля також містять "id".
Máté Juhász

@ Máté Juhász оновлений, щоб вмістити ваш коментар
Антоній

-1

Виходячи з представленої вами інформації - ідентифікатор замовлення працює від першого 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 A1, починаючи з місця розташування Aабо 1, і з довжиною, яка займає його до (але не включаючи) відмітки ".


Можлива проблема, якщо "customer_email": "BADORDER@gmail.com" надходить до порядку_id послідовно, або "ref": "поганий порядок" з великої літери
mcalex

Я висловив своє розуміння вимог і попросив ОП роз'яснити. Виходячи з мого розуміння вимог, вхід, який ви пропонуєте, не може / не відбудеться.
Скотт

отже, "можливо". Я помічаю, що іноді order_id - це перший пункт, іноді - ні. Я припускаю, оскільки "order_id" може бути заголовком або іноді підкреслювати, що інші речі теж можуть змінитися.
mcalex
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.