如何使用Excel上的vba从字符串中提取电话号码和姓名
我是VBA新手,很久以前就参加过这门课程。在一位朋友的帮助下,我们将一个从电话号码中删除国家代码的代码组合在一起,只留下实际的电话号码。 现在,我想在提取的电话号码中包括姓名,即如果我在单元格中输入“John Luke+447895432123”而不带引号,它只会在excel单元格中显示“John Luke 7895432123” 不确定是否足够清楚,希望我能把整个文件发给别人看,我会非常感激如何使用Excel上的vba从字符串中提取电话号码和姓名,excel,vba,Excel,Vba,我是VBA新手,很久以前就参加过这门课程。在一位朋友的帮助下,我们将一个从电话号码中删除国家代码的代码组合在一起,只留下实际的电话号码。 现在,我想在提取的电话号码中包括姓名,即如果我在单元格中输入“John Luke+447895432123”而不带引号,它只会在excel单元格中显示“John Luke 7895432123” 不确定是否足够清楚,希望我能把整个文件发给别人看,我会非常感激 Sub Runner() Dim i As Long, k As Long Dim lpage As
Sub Runner()
Dim i As Long, k As Long
Dim lpage As Long
lpage = Sheet2.UsedRange.SpecialCells(xlCellTypeLastCell).Row
For i = lpage To 8 Step -1
If InStr(1, i / 500, ".") = 0 Then
DoEvents
End If
For k = 2 To Sheet2.Range("lak1").End(xlToLeft).Column
If Sheet2.Cells(i, k) <> "" Then
Sheet2.Cells(i, k) = Extract_Number_from_string(Sheet2.Cells(i, k))
If Left(Sheet2.Cells(i, k), 2) <> 44 And Left(Sheet2.Cells(i, k), 1) <> "7" Then
Sheet2.Cells(i, k) = ""
ElseIf Left(Sheet2.Cells(i, k), 2) = 44 Then ' And Left(Sheet2.Cells(i, k), 1) <> "7" Then
Sheet2.Cells(i, k) = Right(Sheet2.Cells(i, k), Len(Sheet2.Cells(i, k)) - 2)
End If
End If
Next k
Next i
'duplicate delete
For k = 2 To Sheet2.Range("lak1").End(xlToLeft).Column
On Error Resume Next
Sheet2.Range(Sheet2.Cells(8, k), Sheet2.Cells(900000, k)).RemoveDuplicates Columns:=1, Header:=xlNo
On Error Resume Next
Sheet2.Range(Sheet2.Cells(8, k), Sheet2.Cells(900000, k)).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
Next k
End Sub
Sub RunnerRemTab()
Dim i As Long, k As Long
Dim lpage As Long
lpage = Sheet1.UsedRange.SpecialCells(xlCellTypeLastCell).Row
For i = lpage To 8 Step -1
If InStr(1, i / 500, ".") = 0 Then
DoEvents
End If
For k = 2 To Sheet1.Range("lak1").End(xlToLeft).Column
If Sheet1.Cells(i, k) <> "" Then
Sheet1.Cells(i, k) = Extract_Number_from_string(Sheet1.Cells(i, k))
If Left(Sheet1.Cells(i, k), 2) <> 44 And Left(Sheet1.Cells(i, k), 1) <> "7" Then
Sheet1.Cells(i, k) = ""
ElseIf Left(Sheet1.Cells(i, k), 2) = 44 Then ' And Left(Sheet1.Cells(i, k), 1) <> "7" Then
Sheet1.Cells(i, k) = Right(Sheet1.Cells(i, k), Len(Sheet1.Cells(i, k)) - 2)
End If
End If
Next k
Next i
'duplicate delete
For k = 2 To Sheet1.Range("lak1").End(xlToLeft).Column
On Error Resume Next
Sheet1.Range(Sheet1.Cells(8, k), Sheet1.Cells(900000, k)).RemoveDuplicates Columns:=1, Header:=xlNo
On Error Resume Next
Sheet1.Range(Sheet1.Cells(8, k), Sheet1.Cells(900000, k)).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
Next k
End Sub
Sub-Runner()
暗淡的i一样长,k一样长
一段时间
lpage=Sheet2.UsedRange.SpecialCells(xlCellTypeLastCell).Row
对于i=lpage到8步骤-1
如果仪表(1,i/500,“.”=0,则
多芬特
如果结束
对于表2中的k=2。范围(“lak1”)。结束(xlToLeft)。列
如果表2.单元格(i,k)“,则
Sheet2.单元格(i,k)=从字符串中提取单元格编号(Sheet2.单元格(i,k))
如果左侧(图2.单元格(i,k),2)44和左侧(图2.单元格(i,k),1)“7”,则
表2.单元格(i,k)=“
ElseIf Left(图2.单元格(i,k),2)=44然后’和Left(图2.单元格(i,k),1)“7”然后
表2.单元格(i,k)=右侧(表2.单元格(i,k),Len(表2.单元格(i,k))-2)
如果结束
如果结束
下一个k
接下来我
'重复删除
对于表2中的k=2。范围(“lak1”)。结束(xlToLeft)。列
出错时继续下一步
Sheet2.范围(Sheet2.单元格(8,k),Sheet2.单元格(900000,k))。移除的重复列:=1,标题:=xlNo
出错时继续下一步
Sheet2.范围(Sheet2.单元格(8,k),Sheet2.单元格(900000,k))。特殊单元格(xlCellTypeBlanks)。删除Shift:=xlUp
下一个k
端接头
子RunnerRemTab()
暗淡的i一样长,k一样长
一段时间
lpage=Sheet1.UsedRange.SpecialCells(xlCellTypeLastCell).Row
对于i=lpage到8步骤-1
如果仪表(1,i/500,“.”=0,则
多芬特
如果结束
对于表1中的k=2。范围(“lak1”)。结束(xlToLeft)。列
如果表1.单元格(i,k)“,则
Sheet1.单元格(i,k)=从字符串中提取单元格编号(Sheet1.单元格(i,k))
如果左侧(图1.单元格(i,k),2)44和左侧(图1.单元格(i,k),1)“7”,则
活页1.单元格(i,k)=“
ElseIf Left(图1.单元格(i,k),2)=44然后’和Left(图1.单元格(i,k),1)“7”然后
表1.单元格(i,k)=右侧(表1.单元格(i,k),Len(表1.单元格(i,k))-2)
如果结束
如果结束
下一个k
接下来我
'重复删除
对于表1中的k=2。范围(“lak1”)。结束(xlToLeft)。列
出错时继续下一步
Sheet1.范围(Sheet1.单元格(8,k),Sheet1.单元格(900000,k))。移除的重复列:=1,标题:=xlNo
出错时继续下一步
Sheet1.范围(Sheet1.单元格(8,k),Sheet1.单元格(900000,k))。特殊单元格(xlCellTypeBlanks)。删除Shift:=xlUp
下一个k
端接头
现在,电话号码提取工作正常,问题是将姓名包含在电话号码中,我已经尝试了所有我能尝试的方法,甚至无法回溯我的步骤,您可以尝试:
Option Explicit
Sub test()
Dim Position As Long
Dim strWholeText As String, strName As String, strPhoneNo As String
With ThisWorkbook.Worksheets("Sheet1")
strWholeText = .Range("A1").Value
Position = InStr(1, strWholeText, "+")
If Position > 0 Then
strName = Left(strWholeText, Position - 2)
strPhoneNo = Mid(strWholeText, Position + 3, (Len(strWholeText) - (Position + 2)))
Debug.Print strName
Debug.Print strPhoneNo
End If
End With
End Sub
如果你能提供一些我可以用来模拟结果的示例条目,那就太好了,因为这还没有吸引到更多的接近票数。如果样本条目没有那么复杂的话,我想我们也可以使用公式。。但是,我可以通过你选择的媒介,如电子邮件,将excel表格转发给你。