如何從單元格中刪除其餘資訊並僅保留一部分?

如何從單元格中刪除其餘資訊並僅保留一部分?

如果可能的話,我想剝離所有內容並獲取訂單 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 - 將字串切成列

首先,去掉前導{和尾隨}。您可以使用替換函數來完成此操作,或者如果您想使用函數來完成此操作,則可以使用=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

起始編號 = 使用搜尋功能(搜尋不區分大小寫,而尋找則區分大小寫)在儲存格 A2 中從位置 1 開始找到「id」的位置,然後將字元數新增至訂單編號。

字元數是起始數字到下一個雙引號(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/id”,無需插件或 VBA

將 true 和 false MID 語句包裝在 IF 內,檢查是否存在多個 id 且電子郵件地址不是第一個逗號分隔欄位。

 =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。1A1FINDIFERRORA1E1A1E1

現在找到了上述之後的F1第一個。"如果沒有",則這是一個錯誤。如果沒有 anA或 a 1E1則長度為A1+1,所以F1也是錯誤。

所以最後我們設定

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

如果F1是錯誤,則僅顯示一個ERROR指示器。否則,從 的 MIDdle 中提取子字串,從或A1的位置開始,長度達到(但不包括)分隔符號。A1"

相關內容