例如,在字符串VA4940--05-LAMB - ,%2--中,2是最後一個字母數字字符。它在第22個地方。我正在尋找一個將返回「22」的公式。如何使用Excel公式找到Excel字符串中最後一個字母數字字符的位置?
感謝所有回覆的人。這給了我正在尋找的答案,特別是老虎的答案。不過,所有這些都很有幫助
例如,在字符串VA4940--05-LAMB - ,%2--中,2是最後一個字母數字字符。它在第22個地方。我正在尋找一個將返回「22」的公式。如何使用Excel公式找到Excel字符串中最後一個字母數字字符的位置?
感謝所有回覆的人。這給了我正在尋找的答案,特別是老虎的答案。不過,所有這些都很有幫助
替代常規式(無陣列條目必需)溶液:
=LOOKUP(2,1/(ISNUMBER(SEARCH(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),"abcdefghijklmnopqrstuvwxyz1234567890"))),ROW(INDIRECT("1:"&LEN(A1))))
此外,鑑於你提供樣本串VA4940--05-LAMB --,%2--
最後字母數字字符(2)是在21位,而不是22
相同公式,但不使用INDIRECT(這是一個易失性函數,通常應避免)。此公式還假定任何給定字符串的最大長度爲99或更小。調整99的要高,如果必要的:
=LOOKUP(2,1/(ISNUMBER(SEARCH(MID(A1&REPT(" ",99),ROW($1:$99),1),"abcdefghijklmnopqrstuvwxyz1234567890"))),ROW($1:$99))
這樣做了!非常感謝。我的點贊還不算,但你有一個。 –
如果你不要想要一個專用的VBA功能,這裏有一種方法。首先:
=ROW(OFFSET(F1,0,0,LEN(MyStr),1))
{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23}
輸入作爲數組公式(CTRL-SHIFT-ENTER --- 都在這個答案的公式將是數組公式)。如圖所示,這將生成一系列整數1,2,... LEN(MyStr),其中MyStr是您的目標字符串,F1可以是第1行中的任何單元格。
將該函數嵌入MID
函數中以生成單字符的在myStr的數組:
=MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1)
{"V";"A";"4";"9";"4";"0";"-";"-";"0";"5";"-";"L";"A";"M";"B";" ";"-";"-";",";"%";"2";"-";"-"}
,使得沒有必要對測試爲小寫字母字符的UPPER
函數被用作便利。
嵌入,在CODE
函數來產生的ASCII碼的數組:
=CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))
{86;65;52;57;52;48;45;45;48;53;45;76;65;77;66;32;45;45;44;37;50;45;45}
立即確定哪些是(大寫)字母。 IF
函數根據條件>=CODE("A")
測試這些代碼。如果該測試通過,我們將針對條件<=CODE("Z")
執行另一個測試。如果兩個測試都通過了,我們知道它是一個字母,所以返回字符位置。否則返回一個零。
=IF(CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))>=CODE("A"),IF(CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))<=CODE("Z"),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),0),0)
{1;2;0;0;0;0;0;0;0;0;0;12;13;14;15;0;0;0;0;0;0;0;0}
到目前爲止,我們只測試了alpha字符。現在,而不是返回0,如果第一次測試失敗,替代類似的測試數字:
=IF(CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))>=CODE("A"),IF(CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))<=CODE("Z"),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),0),IF(CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))>=CODE("0"),IF(CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))<=CODE("9"),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),0),0))
{1;2;3;4;5;6;0;0;9;10;0;12;13;14;15;0;0;0;0;0;21;0;0}
最後,拿到最後一個匹配字符采取了整個事情的MAX
:
=MAX(IF(CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))>=CODE("A"),IF(CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))<=CODE("Z"),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),0),IF(CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))>=CODE("0"),IF(CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))<=CODE("9"),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),0),0)))
返回21(不是22 --- 22是錯的)。
VBA自定義函數肯定更直接。
要找到首先或最後字符\在一個字符串類型使用的position
以下Array Formula
:
= [First or Last] (
CHOOSE(LOOKUP(CODE(UPPER(
MID(Cll , ROW($A$1 : INDEX($A:$A , LEN(Cll) , 0)), 1))),
[Lookup Array]), "" ,
ROW($A$1 : INDEX($A:$A , LEN(Cll)))))
在哪裏:
[第一個或最後]:使用MIN
爲首先字符或MAX
爲最後字符
CLL:包含字符串細胞,以搜尋
[查找數組]:數組要用於驗證基於on 字符類型找到
字符類型叔 - 分類(參見圖1)
數字:0至9
阿爾法:A到Z (低級&大寫)
阿爾法國際 :ÀÃ012 012 012 012 012 38 (lower & upper case)
其他字符:任何其他ASCII字符
查找數組要用於字符 *的每個類型 - 短陣與UPPER
功能使用(見圖。2)
數字:{1,1;48,2;58,1}
阿爾法:{1,1;65,2;91,1}
阿爾法國際:{1,1;138,2;139,1;142,2;143,1;159,2;160,1;192,2; 198,1;199,2;208,1;209,2;215,1;217,2;222,1}
其他字符:{1,2;48,1;58,2;65,1;91,2;97,1;123,2;131,1;132,2;138,1; 139,2;142,1;143,2;154,1;155,2;156,1;157,2;158,1;160,2;192,1; 198,2;199,1;208,2;209,1;215,2;217,1;222,2;224,1;247,2;248,1}
圖2
這些陣列可以根據需要進行組合,例如在這種情況下,問題是問到找到字符串在最後的字母數字字符,我們將結合使用數字和Alpha數組。
字符串:VA4940--05-LAMB --,%2--
對於此示例此字符串位於小區C21
讓我們替換陣列式的參數:
[首先或最後] = >MAX
CLL =>C21
[查找數組] =>'{1,1;48,2;58,1;65,2;91,1}
- 字母數字
在細胞G24
輸入以下數組公式:
=MAX(CHOOSE(LOOKUP( CODE(UPPER(MID($C21,ROW($A$1:INDEX($A:$A,LEN($C21),0)),1))), {1,1;48,2;58,1;65,2;91,1}),"", ROW($A$1:INDEX($A:$A,LEN($C21)))))
基本上什麼式確實是:
MID($C21,ROW($A$1:INDEX($A:$A,LEN($C21),0)),1))
部分結果:{V, A, 4, 9, 4, 0, -, -, 0, 5, -, L, A, M, B, , -, -, ,, %, 2, -, -}
LOOKUP(CODE(UPPER( {V, A, 4, 9, 4, 0, -, -, 0, 5, -, L, A, M, B, , -, -, ,, %, 2, -, -}), {1,1;48,2;58,1;65,2;91,1})
部分結果:{2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,1,1,1,1,1,2,1,1}
CHOOSE({2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,1,1,1,1,1,2,1,1},"", ROW($A$1:INDEX($A:$A,LEN($C21))))
部分結果:{1,2,3,4,5,6,,,9,10,,12,13,14,15,,,,,,21,,}
哇。這令人印象深刻。非常感謝你的幫助。我會在星期一嘗試這個,並讓你知道它是如何發生的。 –
它是不成問題編寫一個專用VBA功能和在公式中使用呢? –
http://stackoverflow.com/questions/18617349/excel-last-character-string-match-in-a-string – ergonaut
如果可能的話,我想避免VBA。 –