舉個例子,某個單元格的內容是ABC1234,有沒有函數公式可以將這個單元格的全部字母和前兩位數字篩選出來?也就是變成ABC12?求大神指教


=LEFT(A1,LOOKUP(,0/(MID(A1,ROW(INDIRECT("1:"LEN(A1))),1)&>="a"),ROW(INDIRECT("1:"LEN(A1))))+2


我順帶提問:一個字元串,從最後面開始,如果發現有連續的數字,最後只保留最前面N個數字(注意,不論前面是否曾出現過數字;N可以指定;譬如N=2時,即題主所提的問題)。求公式。


R語言版,用正則表達式:

library(tidyverse)

df = tibble(
x = c("ABC1234", "EF367", "EEGERG23")
)

df

df %&>%
mutate(x = str_extract(x, "[[:alpha:]]+\d{2}"))


好的公式可能會遲到了,但是不會缺席。

這是一種更簡潔的辦法。

{=LEFT(A1,1+MIN(IFERROR(SEARCH({0,1,2,3,4,5,6,7,8,9},A1),LEN(A1))))}

注意它是一個數組公式,輸入的時候不要不要手動加入{},而是輸入好公司後按shift+control+enter。

從最裡面解釋一下

  1. SEARCH({0,1,2,3,4,5,6,7,8,9},A1):在A1中尋找0在哪,然後尋找1在哪。。。假如A1是「231」,那麼這個公式就會輸出{#VALUE!,3,1,2,#VALUE!,...}。這是因為0不在「231」裡面,所以第一個是#VALUE!,1在第3個位置,2在第1個位置,3在第2個位置。。。
  2. 然後是IFERROR,目的就是把之前由於數字不存在而輸出的#VALUE!替換掉。我選擇的是A1的長度,也可以選一個相對大的數代替#VALUE!
  3. 然後是MIN,目的是找出第一個數字所在位置
  4. 最外層的公式是LEFT,這裡只不過是截取A1至第一個數字的後一個位置。


簡簡單單的數字拆分

問題中提到的是需要保留全部字母和前兩位數字,在powerquery中你只需要分三步就可以完成。

第一步:拆分「按照非數字到數字的轉換」,把字母和數字拆分開來。

第二步:拆分「按字元數」,把數字前兩位拆分出來。

第三步:把拆分出來的字母列和前兩位數字列給合併在一起,就OK啦


沒有人說CTRL+E嗎?這時候智能填充不是更香嗎?

Excel智能填充

要看你的內容是否規範和規矩。

如果字母,數字是固定長度,可以用分列—固定寬度功能。


舉個例子,某個單元格的內容是ABC1234,有沒有函數公式可以將這個單元格的全部字母和前兩位數字篩選出來?也就是變成ABC12?求大神指教


推薦閱讀:
相关文章