文書處理-EXCEL-儲存格內選取某個字串

請教各位大大
555WELL-USDXXXXXXXXXXX
WELL-USDXXXXXXXXXXX
以上字串2種格式
我希望選取WELL(某個英文字),WELL前面有時是數字,有時沒有
請問各位大大
我儲存格的參數該怎麼設定呢?
2015-12-18 23:08 發佈
您的這問題,在下想過之後,
覺得這似乎不是光用表格內建函數能做到,
依在下的想法步驟,

步驟1. 先截取出 "-" 符號左側的字串部份.
步驟2. 再從所截取出的字串,找到第一個非數值的字元位置,然後以這為起始點,截取後面的字串部份.

問題就在於 "步驟2." 中,
如何找到一個字串中,其第一個非數值的字元位置,
這個部份似乎不是光用內建函數能做到的...

所以,目前在下是覺得您可以改用建立自訂函數來實現您要的功能,如下:




Excel範例文件
附加壓縮檔: 201512/mobile01-4b4b68d797172a33eb04e8a82dfc3eb3.zip
同意樓上大大,需自製函數
以下東施效顰之作,見笑了:

Function getMyString(ByVal str As String) As String
If InStr(str, "-") > 0 Then str = Left(str, InStr(str, "-") - 1)
getMyString = str
If IsNumeric(Left(str, 1)) Then getMyString = getMyString(Right(str, Len(str) - 1))
End Function
a22497967 wrote:
555WELL-USDXXXXXXXXXXX
WELL-USDXXXXXXXXXXX
...(恕刪)


如果 數字一定在左邊,英文字後面一定有"-"

這種簡單的固定格式,用公式沒問題的

範例(假設每格字元數不超過30個)
以下在同一行,a2、a3…的公式,直接往下拉就可以了

=MID(LEFT(A1,FIND("-",A1)-1),SUMPRODUCT(- -ISNUMBER(MID(A1,ROW($A$1:$A$30),1)+0))+1,FIND("-",A1)-1)

antonioChang wrote:
同意樓上大大,需自製函數
以下東施效顰之作,見笑了:

Function getMyString(ByVal str As String) As String
If InStr(str, "-") > 0 Then str = Left(str, InStr(str, "-") - 1)
getMyString = str
If IsNumeric(Left(str, 1)) Then getMyString = getMyString(Right(str, Len(str) - 1))
End Function


您寫的這個函數是採用遞迴的寫法,
內容也達到精簡的原則,
這個用法在下覺得很有新意,
謝謝您的分享^^
snare wrote:
如果 數字一定在左邊,英文字後面一定有"-"

這種簡單的固定格式,用公式沒問題的

範例(假設每格字元數不超過30個)
以下在同一行,a2、a3…的公式,直接往下拉就可以了

=MID(LEFT(A1,FIND("-",A1)-1),SUMPRODUCT(- -ISNUMBER(MID(A1,ROW($A$1:$A$30),1)+0))+1,FIND("-",A1)-1)


您寫的這個公式,在下端詳了一會才暸解其用意,
只是沒想到陣列的取得方式,還有這樣的用法,
又學了一招,謝謝您的分享.^^


但還是想向您請教一下,

1.右邊這一段公式部份 ---> MID(A1,ROW($A$1:$A$30),1)+0
為何式子的最右邊還要 "+0" ?

2.還有右邊這一段 ---> --ISNUMBER(.......
ISNUMBER左邊的 "--" 是代表什麼意思?

雖然整段公式的用意是大略知道了,
但看來看去還是不知以上二個地方其用意為何? 這另在下還是感到蠻疑惑的^^"
yuehmao wrote:
1.右邊這一段公式部份 ---> MID(A1,ROW($A$1:$A$30),1)+0
為何式子的最右邊還要 "+0" ?
2.還有右邊這一段 ---> --ISNUMBER(.......
ISNUMBER左邊的 "--" 是代表什麼意思?...



其實不一定要 +0 ,+1 +2 *1 *2…都可以,因為要算幾個數字,所以數值不重要

字串用mid()拆到陣列,然後隨便做個運算,故意讓文字出錯

然後用 isnumber()求 true false
其實不運算應該也可以,但在這串公式裡面,不運算,結果就會出錯
反正可以用了,我懶的改了

-- 是 sumproduct 用的
sumproduct 對於 true false,無法計算,所以要用--轉成數值
這樣就可以算出字串中有2個數字

我以前在這一篇有解釋過,您可以參考
http://www.mobile01.com/topicdetail.php?f=511&t=3753791&p=1#50771801


過程大概就像這樣

例:12abc-usx

mid()拆字=>運算=> true or false => 1 or 0 => 加總找出字數、位置 =>最後再用mid()取出英文

1 + 0 =1 true 1
2 + 0 =2 true 1
a + 0 =#value! false 0
=>會出錯,文字不能計算
b + 0 =#value! false 0
c + 0 =#value! false 0
- + 0 =#value! false 0
u + 0 =#value! false 0
s + 0 =#value! false 0
x + 0 =#value! false 0





snare wrote:
其實不一定要 +0...(恕刪)


很感謝您詳細的說明,解說的很清楚
這樣一來在下已完全了解您的公式了,
實在非常的感謝您~3Q Very Much!^^
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?