Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: cyt381828864

[已解决]提取手机号?

[复制链接]
发表于 2013-3-15 12:54 | 显示全部楼层
试试这个   =LEFT(A2,11)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2013-3-15 12:55 | 显示全部楼层
这个只能提取第一个手机号
如果有两个以上的就不知道了
你的格式好像不统一
回复

使用道具 举报

发表于 2013-3-15 13:05 | 显示全部楼层
有的中间还有分隔符号,有的又没有。真是为了做事就建个辅助列吧。
回复

使用道具 举报

发表于 2013-3-15 13:32 | 显示全部楼层
本帖最后由 hwc2ycy 于 2013-3-15 13:33 编辑
  1. Sub GetMobileNumber()
  2.     Dim lLastRow As Long, i As Long
  3.     Dim arr, arr2()
  4.     Dim strTemp As String
  5.     lLastRow = Cells(Rows.Count, 2).End(xlUp).Row
  6.    
  7.    
  8.     arr = Range("b1:c" & lLastRow)
  9.     ReDim arr2(1 To UBound(arr), 1 To 1)
  10.    
  11.    
  12.     Dim reg As Object, arrtemp
  13.     Set reg = CreateObject("VBScript.regExp")
  14.     With reg
  15.         .Global = True
  16.         .Pattern = "1[853]\d{9}"
  17.         For i = LBound(arr) + 1 To UBound(arr)
  18.             strTemp = Replace(arr(i, 1), " ", "")
  19.             If .test(strTemp) Then
  20.                 'arrtemp = .Execute(strTemp)
  21.                 arr2(i, 1) = .Execute(strTemp)(0)
  22.             End If
  23.    
  24.         Next
  25.     End With
  26.     Set reg = Nothing
  27.     arr2(1, 1) = "手机号"
  28.     Range("e1").Resize(UBound(arr)) = arr2
  29.     MsgBox "号码提取完成"
  30. End Sub
复制代码
回复

使用道具 举报

发表于 2013-3-15 13:40 | 显示全部楼层
提取单元格中所有手机号码。
  1. Sub GetMobileNumber()
  2.     Dim lLastRow As Long, i As Long, j As Byte
  3.     Dim arr, arr2()
  4.     Dim strTemp As String
  5.     lLastRow = Cells(Rows.Count, 2).End(xlUp).Row


  6.     arr = Range("b1:c" & lLastRow)
  7.     ReDim arr2(1 To UBound(arr), 1 To 1)


  8.     Dim reg As Object, arrTemp
  9.     Set reg = CreateObject("VBScript.regExp")
  10.     With reg
  11.         .Global = True
  12.         .Pattern = "1[853]\d{9}"
  13.         For i = LBound(arr) + 1 To UBound(arr)
  14.             strTemp = Replace(arr(i, 1), " ", "")
  15.             If .test(strTemp) Then
  16.                 Set arrTemp = .Execute(strTemp)
  17.                 If arrTemp.Count > 1 Then
  18.                     For j = 0 To arrTemp.Count - 1
  19.                         arr2(i, 1) = arr2(i, 1) & arrTemp(j) & vbCrLf
  20.                     Next
  21.                 Else
  22.                     arr2(i, 1) = arrTemp(0)
  23.                 End If
  24.             End If

  25.         Next
  26.     End With
  27.     Set reg = Nothing
  28.     arr2(1, 1) = "手机号"
  29.     Range("e1").Resize(UBound(arr)) = arr2
  30.     MsgBox "号码提取完成"
  31. End Sub
复制代码
回复

使用道具 举报

发表于 2013-3-15 13:41 | 显示全部楼层
本帖最后由 笨笨四 于 2013-3-15 13:43 编辑

=MID(B2,FIND("A1","A"&SUBSTITUTE(B2,CHAR(10),"A")&"A1"),11)
试试这个。我测试没什么问题。

当然,如果有两个手机号的,这个只有提取一个。如果要提取这两个的话,公式要修改。
回复

使用道具 举报

发表于 2013-3-15 13:48 | 显示全部楼层
  1. Sub GetMobileNumber1()
  2. '---------------------------------------------------------------------------------------
  3. ' Procedure : GetMobileNumber1
  4. ' Author    : hwc2ycy
  5. ' Date      : 2013/3/15
  6. ' Purpose   : 利用正则实现提取所有的手机号码
  7. '---------------------------------------------------------------------------------------
  8. '
  9.     Dim lLastRow As Long, i As Long, j As Byte
  10.     Dim arr, arr2()
  11.     Dim strTemp As String
  12.     Dim reg As Object, arrTemp

  13.     lLastRow = Cells(Rows.Count, 2).End(xlUp).Row
  14.     arr = Range("b1:c" & lLastRow)

  15.     ReDim arr2(1 To UBound(arr), 1 To 1)

  16.     Set reg = CreateObject("VBScript.regExp")
  17.     With reg
  18.         .Global = True
  19.         .Pattern = "1[853]\d{9}"

  20.         For i = LBound(arr) + 1 To UBound(arr)
  21.             strTemp = Replace(arr(i, 1), " ", "")
  22.             If .test(strTemp) Then
  23.                 Set arrTemp = .Execute(strTemp)
  24.                 strTemp = ""
  25.                 For j = 0 To arrTemp.Count - 1
  26.                     strTemp = strTemp & arrTemp(j) & vbCrLf
  27.                 Next
  28.                 arr2(i, 1) = Left(strTemp, Len(strTemp) - 1)
  29.             End If
  30.         Next
  31.     End With

  32.     Set reg = Nothing

  33.     arr2(1, 1) = "手机号"

  34.     Application.ScreenUpdating = False
  35.     Range("e1").Resize(UBound(arr)) = arr2
  36.     MsgBox "号码提取完成"
  37.     Application.ScreenUpdating = True
  38. End Sub

  39. Sub GetMobileNumber2()
  40. '---------------------------------------------------------------------------------------
  41. ' Procedure : GetMobileNumber2
  42. ' Author    : hwc2ycy
  43. ' Date      : 2013/3/15
  44. ' Purpose   : 利用正则实现提取第一个手机号码
  45. '---------------------------------------------------------------------------------------
  46. '
  47.     Dim lLastRow As Long, i As Long, j As Byte
  48.     Dim arr, arr2()
  49.     Dim strTemp As String
  50.     Dim reg As Object, arrTemp

  51.     lLastRow = Cells(Rows.Count, 2).End(xlUp).Row
  52.     arr = Range("b1:c" & lLastRow)

  53.     ReDim arr2(1 To UBound(arr), 1 To 1)

  54.     Set reg = CreateObject("VBScript.regExp")
  55.     With reg
  56.         .Global = True
  57.         .Pattern = "1[853]\d{9}"

  58.         For i = LBound(arr) + 1 To UBound(arr)
  59.             strTemp = Replace(arr(i, 1), " ", "")
  60.             If .test(strTemp) Then
  61.                 arr2(i, 1) = .Execute(strTemp)(0)
  62.             End If
  63.         Next
  64.     End With

  65.     Set reg = Nothing

  66.     arr2(1, 1) = "手机号"

  67.     Application.ScreenUpdating = False
  68.     Range("e1").Resize(UBound(arr)) = arr2
  69.     MsgBox "号码提取完成"
  70.     Application.ScreenUpdating = True
  71. End Sub
复制代码
回复

使用道具 举报

发表于 2013-3-15 13:50 | 显示全部楼层
1.rar (229.46 KB, 下载次数: 16)
回复

使用道具 举报

发表于 2013-3-15 13:51 | 显示全部楼层    本楼为最佳答案   
MID(SUBSTITUTE(B2," ",""),FIND("A1","A"&SUBSTITUTE(TRIM(SUBSTITUTE(B2," ","")),CHAR(10),"A")&"A1"),11)
改一下。。
回复

使用道具 举报

发表于 2013-3-15 13:53 | 显示全部楼层
蝶·舞 发表于 2013-3-15 11:54
两次分列,然后判断位数进行提取
实际工作嘛,不一定非要一条公式做到死,能出结果就是好方法

妹纸这方法好。求私下教一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-16 11:55 , Processed in 0.304874 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表