Vba 在for循环中检索字符串时修剪字符串?

Vba 在for循环中检索字符串时修剪字符串?,vba,excel,Vba,Excel,我有一个for循环,它从一家企业的谷歌地图页面检索电话号码 For Each a In Array("_Xbe _ZWk kno-fv") aa = "" aa = IE.Document.getElementsByClassName(a)(0).innerText If Len(bb) > 0 Then Wksht.Cells(Ln

我有一个for循环,它从一家企业的谷歌地图页面检索电话号码

               For Each a In Array("_Xbe _ZWk kno-fv")
                aa = ""
                aa = IE.Document.getElementsByClassName(a)(0).innerText
                If Len(bb) > 0 Then
                Wksht.Cells(LngRow, 10) = aa
                Exit For
              End If

           Next
它工作得很好,但是电话号码的格式是(xx)xxxx xxxx。我希望它是XXXXXXXXX。如何在for循环的中间进行修剪和连接?

试试代码

 For Each a In Array("_Xbe _ZWk kno-fv")
            aa = ""
            aa = IE.Document.getElementsByClassName(a)(0).innerText
            If Len(aa) > 0 Then
            aa =trim(aa)
            aa = mid(aa, 2,2) & mid(aa,6,4)& right(aa,len(aa)-10)

            Wksht.Cells(LngRow, 10) = aa
            Exit For
          End If

       Next
试试下面的代码

 For Each a In Array("_Xbe _ZWk kno-fv")
            aa = ""
            aa = IE.Document.getElementsByClassName(a)(0).innerText
            If Len(aa) > 0 Then
            aa =trim(aa)
            aa = mid(aa, 2,2) & mid(aa,6,4)& right(aa,len(aa)-10)

            Wksht.Cells(LngRow, 10) = aa
            Exit For
          End If

       Next

您需要更改列的NumberFormat,并使用replace删除括号和空格

Wksht.Columns(10).NumberFormat = "0000000000"

For Each a In Array("_Xbe _ZWk kno-fv")
    aa = ""
    aa = IE.Document.getElementsByClassName(a)(0).innerText
    aa = Replace(aa, "(", "")
    aa = Replace(aa, ")", "")
    aa = Replace(aa, " ", "")

    If Len(bb) > 0 Then
        Wksht.Cells(LngRow, 10) = aa
        Exit For
    End If
Next

您需要更改列的NumberFormat,并使用replace删除括号和空格

Wksht.Columns(10).NumberFormat = "0000000000"

For Each a In Array("_Xbe _ZWk kno-fv")
    aa = ""
    aa = IE.Document.getElementsByClassName(a)(0).innerText
    aa = Replace(aa, "(", "")
    aa = Replace(aa, ")", "")
    aa = Replace(aa, " ", "")

    If Len(bb) > 0 Then
        Wksht.Cells(LngRow, 10) = aa
        Exit For
    End If
Next

强制正则表达式答案

For Each a In Array("_Xbe _ZWk kno-fv")
    aa = vbNullString
    aa = IE.Document.getElementsByClassName(a)(0).innerText
    If Len(bb) > 0 Then
        With New RegExp
            .Pattern = "[^\d]"
            .Global = True
            Wksht.Cells(LngRow, 10) = .Replace(aa, vbNullString)
        End With
        Exit For
    End If
Next

注意:这需要引用Microsoft VBScript正则表达式,或者您可以通过使用
和CreateObject(“VBScript.RegExp”)
来使用后期绑定,而不是使用
和新的RegExp

强制正则表达式答案

For Each a In Array("_Xbe _ZWk kno-fv")
    aa = vbNullString
    aa = IE.Document.getElementsByClassName(a)(0).innerText
    If Len(bb) > 0 Then
        With New RegExp
            .Pattern = "[^\d]"
            .Global = True
            Wksht.Cells(LngRow, 10) = .Replace(aa, vbNullString)
        End With
        Exit For
    End If
Next


注意:这需要引用Microsoft VBScript正则表达式,或者您可以通过使用
和CreateObject(“VBScript.RegExp”)
来使用后期绑定,而不是使用
和新的RegExp

来使用后期绑定,但我刚刚意识到我编写了If Len(bb),我不知道我为什么这么做,它应该是aa,但两者都没有区别:SNo它只是以原始数字格式正常运行代码。它工作得更好,去掉了括号,但空格仍然存在。出于某种原因,仍然切断了第一个数字,示例数字是(02)1234 5678不起作用,但我也刚刚意识到我写了If Len(bb),我不知道我为什么这么做,它应该是aa,但两者都没有区别:SNo它只是以原始数字格式正常运行代码。它工作得更好,去掉了括号,但空格仍然存在。出于某种原因,仍然切断了第一个数字,示例数字是(02)1234 5678您可能只需要使用
Wksht.Cells(LngRow,10)=Replace(Replace)(Replace(aa),,,,,,,,,,,)
。(我还假设
,10
指的是J列,而不是你要找的10个字符长的字符串。)这实际上效果很好,只是它对10位电话号码的第一个数字的剪切完全不相关,因为代码是在循环中执行的。您可能需要更改标题。使用替换前修剪功能您可能只需要使用
Wksht.Cells(LngRow,10)=替换(replace)(replace(aa),,,,,,,,,,)
。(我还假设
,10
指的是J列,而不是你要找的10个字符长的字符串。)这实际上效果很好,只是它对10位电话号码的第一个数字的剪切完全不相关,因为代码是在循环中执行的。您可能需要更改标题。在替换函数之前使用trim同样奇怪的问题它切断了第一个数字,但其他操作都很好。此代码不会删除除括号和空格以外的任何内容
Debug.Print aa
在修改之前,查看您得到了什么。我可以得到一个实际标记html的示例吗?第一个数字总是0这一事实可能是个问题吗?@TummyTum-它不是“切断”第一个数字-Excel不是。谢谢Excel,除了在它前面放一个commo或其他东西之外,还有什么其他的吗?同样的奇怪问题,它切断了第一个数字,但其他的都做得很好。这段代码除了括号和空格之外不会删除任何东西
Debug.Print aa
在修改之前,查看您得到了什么。我可以得到一个实际标记html的示例吗?第一个数字总是0这一事实可能是一个问题吗?@TummyTum-它不是“切断”第一个数字-Excel不是。谢谢Excel,除了在它前面放一个通信器或什么东西之外,还有其他的方法吗?