如何實現以下的功能:A列中有純數字、有純英文、也有數字英文字母混合的,現在要把不足8位的、純英文、純字母的全部踢掉。
我一開始的想法是這樣的:
第一步:先用Len函數,把小于8的全刪掉;
第二步:用Isnumber函數,把True的全刪掉;
第三步:用mid函數把每一個位分離出來,然后判斷此位是不是數字,若是為1,否為0(因為不是數字,就肯定是英文字母了)。最后對結果進行求和、連乘。如果和為非零、但連乘為0就是我要的結果了。
后來群里的Zack直接用了一個公式,很輕松地實現了第三步的功能,很牛的思路,很牛的想法。
=IF(COUNT(FIND({0,1,2,3,4,5,6,7,8,9},A1))=0,"純英文刪除","保留")
先查找A列中是否含有數字,然后統計數字的有幾個,如果為0則是純英文,非0則不是。
Sharpen來講解下這公式的意義:(此公式的意思是在內存數組里把A1單元格的值拆分掉,每個單元格只是占一個字母或數字。然后運用find進行對他們的查找。我們可以按F9看到具體的過程,=IF(COUNT({#VALUE!,2,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!}))=0,"純英文刪除","保留")。如果拆分后的每個都是字母的話,就都查找不到,也就返回了錯誤。Counta是計算數值個數,有一個不返回錯誤也就不等于0,得到false,進而最后結果得到保留。)
根據這個核心的公式,我稍微又完善了一下,用了一個If函數,把三步都綜合起來了,最后結果為1,就是我想要的結果。這叫站在高手的肩膀上看世界。
=IF(LEN(A1)>=8,IF(ISNUMBER(A1)=FALSE,IF(COUNT(FIND({0,1,2,3,4,5,6,7,8,9},A1))=0,0,1),0),0)
Sharpen覺得多if嵌套很多人看的很暈。按題目的意思是純英文,純數字和字符不到8位都去掉,三者應該是或者的關系。那公式也可以寫成=IF(OR(LEN(A2)<8,ISNUMBER(A2)=TRUE,COUNT(FIND({0,1,2,3,4,5,6,7,8,9},A2))=0),"刪除","保留")
本篇結束。上面的公式大家可以復制后驗證下。