Board logo

標題: [發問] 如何排除英文字母及"-"字符取全部數字? [打印本頁]

作者: cypd    時間: 2020-7-8 15:26     標題: 如何排除英文字母及"-"字符取全部數字?

[attach]32269[/attach]
如何排除英文字母及"-"字符取全部數字?
針對儲存格內含有英數及其他字符時
利用公式將其統整為數字型態
問題為例  若B4儲存格為 085-8
                      B5儲存格為 5-5-0-5
上述公式該如何修正才能完整呈現為 0858及5505 ?
作者: 准提部林    時間: 2020-7-8 15:49

本帖最後由 准提部林 於 2020-7-8 15:52 編輯

陣列公式(三鍵):
=MID(LOOKUP(,-(1&SUBSTITUTE(MID(A1,MATCH(,MID(A1&1,ROW($1:$99),1)*0,),ROW($1:$15)),"-",))),3,15)

=MID(LOOKUP(,-(1&SUBSTITUTE(MID(A1,MIN(FIND(ROW($1:$10)-1,A1&1/17)),ROW($1:$15)),"-",))),3,15)
作者: hcm19522    時間: 2020-7-8 15:49

https://blog.xuite.net/hcm19522/twblog/589219423
作者: cypd    時間: 2020-7-8 16:39

回復 2# 准提部林

感謝准提部林版主提供解惑的方式
提供以上二種解題深獲良多   ^^
作者: cypd    時間: 2020-7-8 16:42

回復 3# hcm19522
感謝
隨意窩 "EXCEL迷"  blog  或 http://blog.xuite.net/hcm19522/twblog
提取數字 從A列 (7123)之範例解答參考...^^
作者: Andy2483    時間: 2022-12-26 15:47

回復 1# cypd


謝謝前輩發表此主題與範例,以下是VBA的方式,請前輩參考
請教前輩們:
正則的結果可以用Join直接連接起來嗎?

迴圈連接執行結果:
[attach]35659[/attach]

Option Explicit
Sub TEST()
Dim Fn, Rg, Brr, Crr, i&, j&, Sh
Set Sh = ActiveSheet
Brr = Range(Sh.[A1], Sh.[A65536].End(3))
Set Rg = CreateObject("VBScript.RegExp")
Rg.Pattern = "\d+"
Rg.Global = True
ReDim Crr(1 To UBound(Brr), 0) As String
For i = 1 To UBound(Brr)
   Set Fn = Rg.Execute(Brr(i, 1))
   If Fn.Count > 0 Then
      For j = 0 To Fn.Count - 1 '請教各位前輩,可以用Join取代這迴圈嗎?
         Crr(i, 0) = Crr(i, 0) & Fn(j)
      Next
   End If
Next
Sh.[D1].Resize(UBound(Brr), 1) = Crr
End Sub

'以下是測試一維陣列Join
Sub 一維陣列Join()
Dim T
T = [{1,2,3,4,5,6}]
MsgBox T(1)
MsgBox Join(T)
End Sub
作者: Andy2483    時間: 2022-12-27 15:01

回復 6# Andy2483


    回復自己的駑鈍
不再糾結Join
轉念:反向思考

以正則結果置換:
[attach]35674[/attach]

Option Explicit
Sub TEST() '今天學習到 以正則結果置換
Dim i&, Brr, Sh
'↑宣告變數:i是長整數變數,其他是通用型變數
Set Sh = ActiveSheet
'↑令Sh這通用型變數是現用工作表
Brr = Range(Sh.[A1], Sh.[A65536].End(3))
'↑令Brr是 二維陣列!以[A1]到A欄有內容最後一個儲存格,這範圍儲存格值倒入
With CreateObject("VBSCRIPT.REGEXP")
'↑以下是有關於正則的程序
   For i = 1 To UBound(Brr)
   '↑設順迴圈!i從1到Brr陣列縱向最大索引列號數
      .Global = True
      '↑設定全局可用
      .Pattern = "\D+"
      '↑匹配模式為非數字
      Brr(i, 1) = "'" & .Replace(Brr(i, 1), "")
      '↑令i迴圈列第1欄Brr陣列值是 "'"單引號連接 Brr陣列值至換掉非數字的正則
   Next
End With
Sh.[E1].Resize(UBound(Brr), 1) = Brr
'↑令[E1]向下擴展 Brr陣列縱向最大索引列號數列,向右不擴展的範圍以Brr陣列值倒入
End Sub
作者: cypd    時間: 2022-12-31 13:15

回復 7# Andy2483

非常感謝您用心回覆:
回復 6# Andy2483

    回復自己的駑鈍
不再糾結Join
轉念:反向思考

以正則結果置換:
此問題系以帳號出現產生...
若以  A8 儲存格內容...SWF測試-0258(有時會出現中文字)
該程式碼要如何修正?  謝謝您
作者: 准提部林    時間: 2022-12-31 17:59

只要數字
.Pattern = "[^0-9]"
作者: cypd    時間: 2023-1-1 23:22

回復 7# Andy2483
非常感謝您用心回覆:
回復 7# Andy2483

所述問題含中英文字等
經實測所得顯示結果正確喔  ^^
作者: cypd    時間: 2023-1-1 23:26

回復 9# 准提部林

感謝  准提部林  指導
只要數字
.Pattern = "[^0-9]"
請問 [^0-9] 括號數字前之 ^ 符號含意為何??
作者: Andy2483    時間: 2023-1-3 15:39

回復 11# cypd


    請前輩參考以下論壇鏈結帖:
http://forum.twbts.com/viewthrea ... ighlight=%A5%BF%ABh
作者: cypd    時間: 2023-1-4 20:41

回復 12# Andy2483

非常感謝你的分享...正則表達式
值得好好參考  ^^




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