close

4924

Excel 函數應用-高難度資料分欄

這是一位來自中國的讀者提的問題,如果要將A欄資料各個相關資料分解到C~F欄中,那應該如何操作?

4924Excel 函數應用-高難度資料分欄

將儲存格內容分解

首先我們在C2儲存格輸入公式:「=MID($A2,ROW($1:$30),1)」,將A2儲存格中各個字元抓取出來。

4924Excel 函數應用-高難度資料分欄

MID(字串或是含有資串的儲存格,開始字元位置,抓取字元長度) 傳回某個字串從開始字元位置抓取指定字元長度內容。

ROW(1:30),表示130,即是A2儲存格的第一個字元到第30個字元,這第二個數值要視儲存格資料最大長度來設定,一定要比最大長度值還大才可抓取成功。

 

將儲存格內容分解成二欄來比對

再來我們要將A2儲存格資料分成二欄方便比對是否為數值開頭字元。

C2儲存格公式更改成,「=MID($A2,ROW($1:$30)+{0,1},1)」,使C欄從第一個字元開始抓取,D欄從第2個字元開始抓取。{0,1}代表第一欄值加0,第二欄值加1,使形成二個欄。

4924Excel 函數應用-高難度資料分欄

C2儲存格公式更改成,「=-MID($A2,ROW($1:$30)+{0,1},1)」,文字變成#VALUE!,而數值變成負值。

4924Excel 函數應用-高難度資料分欄

 

再透過ISERR函數將錯誤訊息變成TRUE,數值變成FALSE,故公式更改成「=ISERR(-MID($A2,ROW($1:$30)+{0,1},1))」。

4924Excel 函數應用-高難度資料分欄

 

C2儲存格公式更改成「=--ISERR(-MID($A2,ROW($1:$30)+{0,1},1))」,則會將TRUE數值化變成1FALSE數值化變成0

4924Excel 函數應用-高難度資料分欄

 

C2儲存格公式更改成「=MMULT(--ISERR(-MID($A2,ROW($1:$30)+{0,1},1)),{1;1})」,則會將二欄數值皆乘以1

MMULT(陣列1,陣列2..) 傳回二陣列數值內容相乘結果。

0表示二欄皆為數值

1表示二欄一欄為數值,一欄為文字。

2表示二欄皆是文字。

4924Excel 函數應用-高難度資料分欄

 

抓取分解後每欄內容

C2儲存格公式更改成「=IF(MMULT(--ISERR(-MID($A2,ROW($1:$30)+{0,1},1)),{1;1})=1, ROW($1:$30))」,則會將C欄值為1的儲存格顯示其位在第幾個字元的位置值,其他值顯示FALSE字串。

4924Excel 函數應用-高難度資料分欄

 

C2儲存格公式更改成「=SMALL(IF(MMULT(--ISERR(-MID($A2,ROW($1:$30)+{0,1},1)), {1;1})=1,ROW($1:$30)),COLUMN(A1))」,並將公式複製到D2:F2儲存格,則顯示每個儲存格內容開始字元在A2儲存格位置。

=SMALL(數值資料範圍(陣列),抓第幾小的值) 傳回數值範圍或陣列中第幾小的值。

由於公式要向右複製,故第一欄設COLUMN(A1),當向右複製公式A1會變B1C1…依此類推。

4924Excel 函數應用-高難度資料分欄

 

C2儲存格公式更改成「=LEFT($A2,SMALL(IF(MMULT(--ISERR(-MID($A2,ROW($1:$30)+{0,1},1)), {1;1})=1,ROW($1:$30)),COLUMN(A1)))」,並將公式複製到D2:F2儲存格,則顯示每個儲存格加上前面儲存格內容。

4924Excel 函數應用-高難度資料分欄

4924Excel 函數應用-高難度資料分欄

C2儲存格公式更改成「=MID(LEFT($A2,SMALL(IF(MMULT(--ISERR(-MID($A2,ROW($1:$30)+{0,1}, 1)),{1;1})=1, ROW($1:$30)),COLUMN(A1))),SUM(LEN($B2:B2),1),99)」,並將公式複製到D2:F6儲存格,則顯示每個儲存格內容。

4924Excel 函數應用-高難度資料分欄

 

 

LEN($B2:B2) 是要傳回從B2儲存格到目前前一欄儲存格中同列儲存格字串長度。再用SUM函數計算總長度,來決定目前儲存格從那一個字元開始抓取。

99是一隨意值,只要比日A欄儲存格最大長度字串值大即可。

 


arrow
arrow

    錦子老師 發表在 痞客邦 留言(0) 人氣()