可能であれば、すべてを削除して注文 ID を取得したいと思います。問題は、注文 ID の場所と、それが または で始まる場合があること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 (なし{ }
) を選択し、リボンから [データ] > [データ ツール] > [区切り位置] を選択します。次のオプションを使用します。
ステップ2 - 列から注文IDを選択する
その後は、注文 ID を取得するために何でもできます。簡単な方法としては、たとえば列 G のセル G1 に次の数式を入力することです。
=INDIRECT("RC"&MATCH("order*id",A1:F1,0)+1,FALSE)
「OrderId」は例の「order_id」の形式である可能性もあるため、ワイルドカードを使用して*
一致させます。数式は「OrderId」の右側のセルを取得します。
答え2
このような問題には正規表現検索/置換アドイン
(私は何ら関係はなく、ただの熱心なユーザーです)
これにより、正規表現を使用できるようになります。例:
=RegExReplace(UPPER(A1),".*ORDER_?ID"":""([^""]+)"".*","$1")
答え3
セルB2ではMid関数を使用します
テキスト =A2
開始番号 = 検索機能 (検索では大文字と小文字が区別されませんが、Find では区別されます) を使用して、位置 1 から始まるセル A2 の "id" の位置を特定し、文字数を注文番号に追加します。
文字数は、開始番号と次の二重引用符 (ASCII 文字 34) の位置との差です。
=MID(A2,SEARCH("id",A2,1)+5,(FIND(CHAR(34),A2,(SEARCH("id",A2,1)+5))-(SEARCH("id",A2,1)+5)))
アドインや VBA を必要とせずに、電子メール フィールドまたは注文 ID に「ID/id」を追加できるように編集します。
複数の ID が存在すること、および電子メール アドレスが最初のコンマ区切りフィールドではないことを確認する IF 内に、true および false の MID ステートメントをラップします。
=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
提示された情報に基づくと、注文 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 を加えた値、つまり最後の文字の後の次の文字のオフセットに設定します。 はこれらのうち小さい方です。したがって、または が少なくとも 1 つ見つかった場合は、は最初のものを指します。 または が見つからない場合は、これも長さ + 1 になります。1
A1
FIND
IFERROR
A1
E1
A
1
E1
そして、上記の後のF1
最初の を検索します"
。 がない場合"
、これはエラーです。 または がない場合A
、1
は+1E1
の長さであるためA1
、これF1
もエラーです。
それで最終的に私たちは
B1
→=IF(ISERROR($F1), "ERROR", MID($A1, $E1, $F1-$E1))
F1
がエラーの場合は、インジケータを表示するだけです。それ以外の場合は、またはの位置から始まり、区切りの までの長さ(ただし、 は含まない)でERROR
の MIDdle から部分文字列を抽出します。A1
A
1
"