呵呵,这个问题好像刚刚有人问过了,不知是不是同一个人,不管了,挣分了,合适的话我们以后经常相互学习。
我水平比较低,只知道一个比较麻烦点的办法:
首先,在A列的数字和文本之间都加上一个空格,
变成A1:张三 4567 A2:234569 王小明
然后在B1中输入公式:=LEFT(A1,FIND(" ",A1)-1)
在C1中输入公式:=RIGHT(A1,LEN(A1)-FIND(" ",A1))
并将上述公式分别下拉复制到B列、C列的其他单元格中,这时你会发现数字和汉字已经分成了两列,只是每列都是数字和汉字的混合而已
最后,在D1中输入公式:=IF(TYPE(VALUE(B1))=16,B1,C1)
在E1中输入公式:=IF(TYPE(VALUE(B1))=1,B1,C1)
并将上述公式下拉复制到D列、E列的其他单元格中
则D、E两列就是你要的结果
这样操作起来在第一步加空格的时候是有点麻烦,但比你一个一个的复制粘贴还是要省事许多,不知道能不能帮到你。
补充:呵呵,刚刚跟别人学了个比较简单的方法,告诉你吧
在B1中输入公式:
=LOOKUP(9E+307,--MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1234567890)),ROW(INDIRECT("1:"&LEN(A1)))))
C1中输入公式:=SEARCH(B1,A1)
D1中输入公式:=REPLACE(A1,C1,LEN(B1),"")
并将上述公式下拉复制到B、C、D列的其他单元格中
则B列和D列就是你要的数据
假设您的原始数据是以字符开始,后面接数字。那么关键是要找到第一个数字的位置,然后用left和right结合len函数就可以实现了。
关于找第一个数字的位置,网上有用数组公式来做,我觉得很难理解。简单点还是做一个自定义函数。自定义函数的代码如下:
Function mYf(A As String) As Integer
Dim I, J As Integer
Dim mYs As String
I = Len(A)
For J = 1 To I
mYs = Mid(A, J, 1)
If Asc(mYs) >= Asc(0) And Asc(mYs) <= Asc(9) Then
mYf = J
Exit Function
End If
Next J
mYf = J + 1 '如果找不到数字,就等于字符长度+1
End Function
实现的公式如图所示:
结果如图所示:
做好了,说明很麻烦的,直接给你发邮件,告诉我你的信箱
谢谢第一位大哥的回答,我有N行啊.