Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Excel上的vba从字符串中提取电话号码和姓名_Excel_Vba - Fatal编程技术网

如何使用Excel上的vba从字符串中提取电话号码和姓名

如何使用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

我是VBA新手,很久以前就参加过这门课程。在一位朋友的帮助下,我们将一个从电话号码中删除国家代码的代码组合在一起,只留下实际的电话号码。 现在,我想在提取的电话号码中包括姓名,即如果我在单元格中输入“John Luke+447895432123”而不带引号,它只会在excel单元格中显示“John Luke 7895432123”

不确定是否足够清楚,希望我能把整个文件发给别人看,我会非常感激

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表格转发给你。