與 30萬 粉絲一起學Excel


昨天文章《複製粘貼太慢,公式太難,這纔是最強的數據處理神技》,粉絲的留言,原來的VBA自定義函數,遇到小數會存在問題。


爲此,盧子花了一天的時間,研究了正則發現了一片新天地以前那些難於上青天的問題,瞬間就變得很簡單。

1.含有小數、負數求和出錯的優化

\d+只是正則裏面一個用法,匹配數字,相當於[0-9]

小數、負數同時存在,要用-?\d+\.?\d+-就是負號\.代表小數點。

=正則提取(A2,"(-?\d+\.?\d+)","+",2)

還有一大堆表示法,一次性很難記住,先知道一些常用的就好。

1)匹配郵編,郵編是6位數字。正則表達式:\d{6}

2)匹配手機,手機號是11位數字。正則表達式:\d{11}

3)匹配電話,電話是區號-號碼組成,區號有3到4位,號碼有6到9位。正則表達式:\d{3,4}-\d{6,9}

4)匹配日期,日期格式如2022-9-17,明顯數字加橫線組成。正則表達式:\d{4}-\d{1,2}-\d{1,2}

2.普通公式寫到吐血的時間分離

這是昨晚某粉絲的問題,盧子用普通公式寫了一半就放棄了,實在太難。輸入很亂,沒啥規律,需要一大堆判斷。

於是用了正則,瞬間所有問題都不是問題了,輕鬆拿下。

開始時間:時間都是以:作爲分隔符號,存在中文和英文狀態下的:,因此用[::]表示2種符號。時或者分都是1-2位,因此用\d{1,2}。最後用ASC將中文的符號全部轉換成英文的。

=ASC(正則提取(A2,"(\d{1,2}[::]\d{1,2})","+",0,1))

結束時間:

=ASC(正則提取(A2,"(\d{1,2}[::]\d{1,2})","+",0,2))

用時:都是min之前1-2位,也就是\d{1,2}min。

=正則提取(A2,"(\d{1,2}min)","+",0,1)

3.最後,再來個簡單的案例,從字符串裏面分離出日期、步數、排名,鞏固下用法


日期:
=正則提取(A2,"(\d+)","+",0,1)


步數:
=正則提取(A2,"(\d+)","+",0,2)

排名:

=正則提取(A2,"(\d+)","+",0,3)

如果日期改變成2022-9-17這種格式,也可以順利提取。

=正則提取(A2,"(\d{4}-\d{1,2}-\d{1,2})","+",0,1)

從上面的案例可以看出,不管多亂,都能提取任意數字,全部數字,甚至求和,接近全能的代碼。

活到老,學到老,即便盧子有15年的Excel經驗,還有一些知識沒掌握好。你也要堅持學習。 

相關文章