Board logo

標題: [已解決][發問]公式問題-倒數第n個特定字元的位置 [打印本頁]

作者: Baracuda    時間: 2011-3-30 10:07     標題: [已解決][發問]公式問題-倒數第n個特定字元的位置

本帖最後由 Baracuda 於 2011-4-1 17:39 編輯

原始資料在「問題」,要求出「應有輸出」
無法直接用資料剖析
因為每個欄位必定有「空白」做區隔,但是品名部分的「空白」並不是區隔

想出來的解題方法招分2段
1.「容量」、 「單價 」、「數量」、 「總價」是後面的4個欄位,予以分離出來
2.前段再用找尋第1個「空白」,來做欄位切割

但是不會倒數第4個空白的位置的公式,請問有人可以幫忙嗎?
作者: gong    時間: 2011-3-31 01:17

本帖最後由 gong 於 2011-3-31 01:20 編輯

參考
b2=MID($A2,1,FIND(" ",$A2)-1)
{c2=SUBSTITUTE(MID($A2,LARGE(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)=" ",ROW(INDIRECT("1:"&LEN($A2)))),4)+1,1000)," "&$E2&" "&$F2&" "&$G2,"")}
d2=SUBSTITUTE(SUBSTITUTE($A2,$B2&" ","")," "&$C2&" "&$E2&" "&$F2&" "&$G2,"")
{e2=--SUBSTITUTE(MID($A2,LARGE(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)=" ",ROW(INDIRECT("1:"&LEN($A2)))),3)+1,1000)," "&F2&" "&$G2,"")}
{f2=--MID($A2,LARGE(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)=" ",ROW(INDIRECT("1:"&LEN($A2)))),1)+1,1000)}
作者: Baracuda    時間: 2011-3-31 09:32

ANGELA 謝謝,你的公式 Work 。我再消化一下。
作者: Hsieh    時間: 2011-3-31 16:15

本帖最後由 Hsieh 於 2011-4-1 10:20 編輯

我個人偏向函數去做簡單的
取出第一個欄位應該都知道不難
要取最後4欄一起相信大家也都有好方法
只需算出所有空白數量減3,那個空白的位置,就是要切割的位置
再把這兩個得到的答案取代成""就得到規格
再來只要把4欄合在一起的資料用資料剖析就大功告成
[attach]5185[/attach]
在B1選取狀態下定義名稱
x=FIND(CHAR(10),SUBSTITUTE(!$A1," ",CHAR(10),LEN(!$A1)-LEN(SUBSTITUTE(!$A1," ",""))-3))
儲存格公式
B1=TRIM(LEFT($A1,FIND(" ",$A1)))
C欄得到後四欄的內容
C1=TRIM(MID(A1,x,256))
D欄取得規格
D1=TRIM(SUBSTITUTE(SUBSTITUTE(A1,C1,""),B1,""))
將C欄複製/選擇性貼上值到E欄
對E欄以空格為分隔符號做資料剖析
作者: Baracuda    時間: 2011-4-1 10:05

這個說來有點坎坷。
因為我錯過了網頁轉換時的升級的時間,所以我現在的身分變成小學生,無法DownLoad 各位的檔案,可否把公式留一行下來給我用用。
原版我是可以 Download 檔案的。
贊助論壇變成贊助會員後,正好改版,於是忘記升級這件事。
請各位同情一下,暫時幫幫忙。
作者: Baracuda    時間: 2011-4-1 10:10

gong 謝謝
我用您給的公式資料,我Run 出來不work的部分在於C,D,E 3個欄位。
F欄的陣列公式,則是只得到第一欄的內容。
F的資料我會再看過,應該是我的問題。
作者: Baracuda    時間: 2011-4-1 10:11

gong 謝謝
我用您給的公式資料,我Run 出來不work的部分在於C,D,E 3個欄位。
你的公式比較複雜,我暫時還看不出問題是我的部分,還是公式有copy 誤差。
請你幫忙 Verify 有無Copy 錯,我再研究一下。
F欄的陣列公式,則是只得到第一欄的內容。
F的資料我會再看過,應該是我的問題。
作者: Baracuda    時間: 2011-4-1 10:13

ANGELA 你的公式我有看過,我看懂了。
有點「暴力」解題。
不過 Work 比較重要,這關可以先過。
謝謝你。
作者: Hsieh    時間: 2011-4-1 10:35

回復 9# Baracuda


    [attach]5193[/attach]
對ANGELA 的公式我還在努力消化中
為何我做出來結果是錯的?
繼續努力
作者: Baracuda    時間: 2011-4-1 11:30

Hsieh
Sorry 不能發簡訊息給你。
我重做,發現 ANGELA 的公式有 Bug
我一時有看錯。
作者: Baracuda    時間: 2011-4-1 11:30

ANGELA
Sorry 你的真的不 Work。
有些 Bug。
作者: ANGELA    時間: 2011-4-1 12:34

本帖最後由 ANGELA 於 2011-4-1 13:32 編輯

[attach]5196[/attach]
沒細看,以為空格是一致的,原來有那麼多種,這公式確實不適用修改如下
定義名稱: xx=LEN(問題!$A2)-LEN(SUBSTITUTE(問題!$A2," ",))
  C2 =TRIM(MID(SUBSTITUTE($A2," ",REPT(" ",100)),COLUMN(INDIRECT(LOOKUP(XX,{5,6,7,8},{"B","C","D","E"})&1))*100+1,100))
E2=TRIM(MID(SUBSTITUTE($A2," ",REPT(" ",100)),COLUMN(INDIRECT(LOOKUP(XX,{5,6,7,8},{"C","D","E","F"})&1))*100+1,100))
F2=TRIM(MID(SUBSTITUTE($A2," ",REPT(" ",100)),COLUMN(INDIRECT(LOOKUP(XX,{5,6,7,8},{"D","E","F","G"})&1))*100+1,100))
G2=TRIM(MID(SUBSTITUTE($A2," ",REPT(" ",100)),COLUMN(INDIRECT(LOOKUP(XX,{5,6,7,8},{"E","F","G","H"})&1))*100+1,100))
D2 用龔版主,謝版主的方法用替代即可.
也可改成
E2=TRIM(MID(SUBSTITUTE($A2," ",REPT(" ",100)),(MATCH(XX,{5,6,7,8},)+COLUMN(B1))*100+1,100)) 往右COPY 到G2
作者: Baracuda    時間: 2011-4-1 14:14

Hsieh
謝謝。我不是很明白,但可以用。
!$A1這個我不懂,加上 "!"是什麼意思。我找不到相關說明。
而且一步一步執行會有問題。
例如我把=LEN(!$A1)放進去儲存格,會得到錯誤訊息。
X 是第4個空白的位置。Char(10) 是Line Feed,應該只是做為中繼暫存的變數之用。

你的公式是乾淨利落。其他的部分我可以慢慢研究
作者: Hsieh    時間: 2011-4-1 14:38

回復 13# Baracuda
在定義名稱中使用驚歎號但未使用工作表名稱
這是共用參照的寫法,只能使用於定義名稱,不能用到儲存格公式
因為我是有用多表測試,所以為了要讓每個工作表都能引用此名稱,所以採用這樣寫法
你可以把驚嘆號刪除,系統在定義名稱公式會自動加入作用中工作表名稱的參照
整個思考邏輯如下:
這是用去除空白後字元數,與全部字元數的差來計算所有空白數量
將此數值減去3就是倒數第4個空白位置
把那個位置的空白用一個A欄不會出現的字元取代
這裡我使用CHAR(10)這個換行字元
然後找到這個換行字元所在位置就是分隔位置了
作者: Baracuda    時間: 2011-4-1 16:19

Hsieh
謝謝。
這樣很清楚了。公式其他不瞭解的部分都算小事。
「共用參照」這個是我第一次用到的。
謝謝。
作者: Baracuda    時間: 2011-4-1 16:38

Hsieh
謝謝你的解答。
你的公式部分有一段比較「暴力」,就是C1=TRIM(MID(A1,x,256))

我有做一些小修正而已(比起你這種大架構而言,真的是很小的修正)
C1=TRIM(MID(A2,X,LEN(A2)-X+1))
不登大雅之堂。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)