セルから残りの情報を削除し、一部のみを保持するにはどうすればよいでしょうか?

セルから残りの情報を削除し、一部のみを保持するにはどうすればよいでしょうか?

可能であれば、すべてを削除して注文 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 (なし{ }) を選択し、リボンから [データ] > [データ ツール] > [区切り位置] を選択します。次のオプションを使用します。 ここに画像の説明を入力してください ここに画像の説明を入力してください

すると、情報が 4 つの列にきちんと表示されます。 ここに画像の説明を入力してください

ステップ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 は最初のフィールドから最初の次の (引用符) まで実行されA1これ"は難しくありません。いくつかの「ヘルパー列」を使用すると最も簡単です。

  • 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 になります。1A1FINDIFERRORA1E1A1E1

そして、上記の後のF1最初の を検索します"。 がない場合"、これはエラーです。 または がない場合A1は+1E1の長さであるためA1、これF1もエラーです。

それで最終的に私たちは

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

F1がエラーの場合は、インジケータを表示するだけです。それ以外の場合は、またはの位置から始まり、区切りの までの長さ(ただし、 は含まない)でERRORの MIDdle から部分文字列を抽出します。A1A1"

関連情報