今天主要分享一下關於從文本中提取數值的公式是一步一步演變到大家今天所看到的樣子的主要思想和思路!
如果你真的想學習,靜下心來,內容較長,聽我慢慢道來!全部看完,你必定有所收穫~!
友情提醒:全文4000字,24個圖+動畫,預計閱讀10分鐘!
案例很簡單:提取其中的金額數值
方法有很多,本篇的主題是使用公式的思路講解!
1、這種從文本中提取數字。那麼我們第一步就要找到我們要提取數字開始的位置!=IFERROR(FIND(C$1,$A2),99)但是其實這個數字不太好確定,我們不知道什麼位置會出現數字,但是有一點,就是只要數字無關的數字出現在內容的最後,那麼肯定不會影響我取最小!比如 房租900元 ,0-9出現在元後面,肯定不影響我們查找數值首次出現的位置!轉成這樣 房租900元0123456789,我們再來查找看看這樣的話,既不會影響我們查找首次出現數字的位置,也不會因為查找不多而報錯!由於FIND返回首次的位置,所以就算後面出現了其他數值也不影響先出現數字的位置!
但是我們不能去直接修改單元格的內容,所有我們應該把0-9拼接到公式中去=FIND(C$1,$A2&"0123456789")4、按照一般思路,所有的數值位置都找到了,下面取最小值就可以了!
結果是3,也就是首次出現數字位置是第三個位置,也就是9對應的位置!
你以為這樣就結束了嗎?其實這只是開始,我們說了是一般思路!
但是總是有一些數理邏輯比較好的同學,他們覺得0-9這10個數字,使用輔助列太麻煩了,要是可以直接寫在公式中就好了,這個直接一次性寫在公式中,也就是寫入一組數,也就是大家初期認識的數組了!
他說一組大括號包裹著的 {0,1,2,3,4,5,6,7,8,9}=FIND({0,1,2,3,4,5,6,7,8,9},$A2&"0123456789")以上公式結果會是10個數字,分別對應0-9這個10個數字首次出現的位置!但是這樣的長度,還是無法讓他們滿意的,這樣的數值,都是連續的就好像序號一樣,那麼Excel是否有函數可以生成序號的,當然有,你稍微找找應該發現ROW,他可以返回你說給定單元格的行號!給多個就返回多個,『就是返回A1:a10單元格的行號對應1到10,可以我們要0-9,但是由於我們不關注列,所有可以直接寫行號即可!=FIND(ROW($1:$10)-1,$A2&"0123456789")如果你是你,看到上面的簡化,你肯定也看第二參數不爽,覺得應該也可以進一步簡化!
當然同樣是數理邏輯好的同學出現了,他們想只要一個數值包好0-9就好了,但是還不能太長,那麼最好的就是分數,還要除不盡或者除得盡,這個10個數字都有,其實這樣的數值有很多,但是後續延續下來常用的就是1/17=0.0588235294117647 0-9都在其中!當然你也可有可能看到5^19=19073486328125 這個數,和上面不同的是這裡沒有小數點,如果你提取的數值中有小數,那麼推薦1/17,沒有則可以使用5^19次方!有了上面的特殊數值,那麼第二參數也就可以進一步簡化了!▼這就是目前最流行查找數值首次出現數字位置的經典公式了!=FIND(ROW($1:$10)-1,$A2&1/17)一個經典公式,現在大家都在用,但是他背後真的經歷了很多,感謝那位數理邏輯好的同學,感謝這些開荒者!
一個數學好的不一定是函數高手,但是函數高手必定是數理邏輯好的!
查找到了開始的位置,下面其實就比較簡單了,直接從這個位置截取,截取的長度有數值的個數確定!
到底有多少個數字呢,我們可以採用第一種思路,查找0-9,統計結果是數值的個數!
=SUM(--ISNUMBER(-MID(A2,ROW($1:$99),1)))判斷是否是數值,我一位一位拿出來,用ISNUMBER判斷一下不就知道了嗎?只要要截取多少,不確定,我們就給一個足夠大的數值就行!你可能看到了兩個符號,經常也好奇幹嘛用的,其實MID是文本截取函數,截取的結果都是文本型的,ISNUMBER識別不了,想要識別必須轉成數值型!
而文本型數值經過四則運算就可以轉成數值型,這裡的﹣ 其實就是讓文本型數值轉成數字,但是其他漢字文本就會變成錯誤值,當然並不是影響ISNUMBER!
最後是外面的--,其實也是類似的作用,這是這次是把邏輯值轉成數字,--TRUE=1,--FASLE=0,這個就是Excel的邏輯約定!如果我們截取9個長度,看一下內容計算後的結果,中間三個1,對應這900這裡其實還不夠嚴謹,那就是如果是小數的問題,所以還要把小數點考慮進去
=SUM(--ISNUMBER(-MID(A4,ROW($1:$9),1)))+ISNUMBER(FIND(".",A4))我能修改了一個數值,加入了小數點,可以發現結果是4,完全OK!開始位置和截取的長度都有了,其實就簡單了,只要把他們帶入MID函數即可!
所以在沒簡化截取長度公式的時候,你的公式應該是這樣!
=MID(A2,MIN(FIND(ROW($1:$10)-1,$A2&1/17)),SUM(--ISNUMBER(-MID(A2,ROW($1:$99),1)))+ISNUMBER(FIND(".",A2)))實在是太長了,這一次不需要數值邏輯好的,我們只需要知道一個函數即可,那就是COUNT,他就是統計數組或者區域中數值個數的
=SUM(--ISNUMBER(-MID(A4,ROW($1:$9),1)))+ISNUMBER(FIND(".",A4))COUNT(-MID(A4,ROW($1:$99),1))+ISNUMBER(FIND(".",A4))計算按照這個思路,還是長的!繼續簡化,這次就是數理邏輯簡化了!考慮小數點,要是能放到公式中就好了,由於Excel認識 「.5」 ,會將其 識別成0.5
所以我們可以考慮截取兩位,這樣小數點問題就不用擔心了!=COUNT(-MID(A2,ROW($1:$99),2))+1=MID(A2,MIN(FIND(ROW($1:$10)-1,$A2&1/17)),COUNT(-MID(A2,ROW($1:$99),2))+1)其實到這裡,基本簡化結束了,但是還有一種情況沒有考慮,那就是負數情況
如果也考慮進去,那麼首先開始位置的公式要稍微調整一下=MID(A2,MIN(FIND({"","-"}&ROW($1:$10)-1,$A2&"-"&1-ROW($1:$10))),COUNT(-MID(A2,ROW($1:$99),2))+1){"","-"} 拼接上主要考慮有或者沒有符號兩種情況,同樣被查的數據也要同時考慮,這裡我們就不再進一步展開了!F9看一下應該就能明白!以上比較通用的數值提取常規的思路演化!希望你能從中學習到或者聊到到一些思路!總是有朋友讓我推薦Excel學習書籍!今天我就推薦基本自己讀過的,算的上國內目前比較不錯的幾本!第一本:Excel2016應用大全,EH出版,函數覆蓋比較全面,也有一定的套路分享!適合函數新手和進階的同學!如果你想學習表格設計,需要補充一點基本設計理論,我推薦這本也是我目前比較喜歡的一本,適合新手!其中雖然有一些小編不敢苟同,但是整體還是非常不錯的!第三本:關於Excel開發的,比較適中中高階段的VBA用戶!目前沒知道上架的資源,有需要的可以到我的知識星球下載!
從2013版本添加了快速填充這個智能填充功能,我們很多數值提取都可以Ctrl+E 輕鬆搞定,如果有個別發現提取不正確,只要稍微調整一下即可!看到這裡很多人可能說,有這麼好用的功能,我還學公式幹什麼?重要的從來都不是什麼公式,而是處理的問題的思路!
當然大家也可以使用我開發的正則表達式自定義函數處理:
或者使用VBA、PowerQuery都是不錯的方法!
感謝(收藏、點讚、在看、轉發),您的鼓勵是小編不斷創作的動力!
興趣是最好的老師